2013-06-13 33 views
5

Trong SQLAlchemy, ModelName.query.filter_by(field_name=value).count() trả về số bản ghi chính xác, nhưng ModelName.query.filter_by(field_name=value).all() chỉ trả về một bản ghi duy nhất. Làm db.session.execute("SELECT * FROM table_name WHERE field_name = 'value'") hoạt động tốt. Có ai phải đối mặt với một vấn đề tương tự? Có ai có bất kỳ ý tưởng những gì có thể có thể là sai. Bất kỳ con trỏ nào cũng sẽ hữu ích.Flask-SQLAlchemy số lượng bản ghi khác nhau cho .count() và .all()

Thông tin có thể hữu ích
Tôi đang sử dụng MS SQL Server 2008 R2 và truy cập bằng FreeTDS/pyodbc. Tôi không kiểm soát cơ sở dữ liệu và không thể thay đổi nó.

Xin cảm ơn trước.

+3

thử quay 'SQLALCHEMY_ECHO' để 'TRUE' để bạn có thể xem những gì các câu lệnh SQL đang được sa thải, sau đó có một cái nhìn để xem nếu' .all() 'truy vấn đang làm điều gì đó bất ngờ. – Doobeh

+6

một điều cần lưu ý là nếu truy vấn trả về nhiều hơn một hàng có cùng khóa chính, truy vấn đối với toàn bộ lớp thực thể sẽ hủy trùng lặp các hàng đó. Nhưng count() sẽ hiển thị số hàng thực tế sẽ được trả về bất kể khóa chính. – zzzeek

+0

Bạn có thể thử một trong các trình điều khiển khác như pymssql không (xem danh sách theo http://docs.sqlalchemy.org/en/rel_0_8/dialects/mssql.html) và xem liệu sự cố vẫn tiếp diễn? Tôi nhớ pyodbc đã được hiển thị một số quirks khi tôi đã thử nó với SQL Server. Nhưng nó đã được một thời gian và tôi chỉ sử dụng nó trực tiếp, không thông qua SQLAlchemy. Đó là lý do tại sao tôi chuyển sang ceODBC vốn đáng tin cậy hơn và nhanh hơn nhiều. Nhưng tiếc là không được hỗ trợ bởi SQLAlchemy. Tuy nhiên tôi sẽ thử một trong những lựa chọn khác mà bạn có. –

Trả lời

0

Chức năng all() trả về một danh sách và count() trả về một số ...