2010-01-18 47 views
5

Tôi muốn biết liệu SQLAlchemy có gặp sự cố khi truy vấn chế độ xem hay không. Nếu tôi truy vấn chế độ xem với SQL thông thường trên máy chủ như:Truy vấn chế độ xem trong SQLAlchemy

SELECT * FROM ViewMyTable WHERE index1 = '608_56_56'; 

Tôi nhận được toàn bộ các bản ghi. Nhưng với SQLAlchemy tôi chỉ nhận được cái đầu tiên. Nhưng trong số đếm là số chính xác. Tôi không biết tại sao.

Đây là mã SQLAlchemy của tôi.

myQuery = Session.query(ViewMyTable) 
erg = myQuery.filter(ViewMyTable.index1 == index1.strip()) 

# Contains the correct number of all entries I found with that query. 
totalCount = erg.count() 
# Contains only the first entry I found with my query. 
ergListe = erg.all() 

Trả lời

8

nếu bạn đã ánh xạ ViewMyTable, truy vấn sẽ chỉ trả lại các hàng có khóa chính không hoàn toàn NULL. Hành vi này là cụ thể cho các phiên bản 0.5 và thấp hơn - trên 0.6, nếu bất kỳ cột nào có giá trị NULL trong khóa chính, thì hàng đó được chuyển thành một thể hiện. Xác định cờ allow_null_pks=True người lập bản đồ của bạn để đảm bảo rằng khóa chính một phần vẫn đếm:

mapper(ViewMyTable, myview, allow_null_pks=True) 

Nếu OTOH các hàng trả lại có tất cả null cho khóa chính, sau đó SQLAlchemy có thể không tạo ra một thực thể vì nó không thể đặt nó vào bản đồ nhận dạng. Thay vào đó, bạn có thể lấy các cột riêng lẻ bằng cách truy vấn cụ thể cho chúng:

for id, index in session.query(ViewMyTable.id, ViewMyTable.index): 
    print id, index 
Các vấn đề liên quan