2010-01-18 583 views
5

我想知道SQLAlchemy是否在查询视图时遇到问题。如果我在服务器上用正常的SQL查询视图,如:查询SQLAlchemy中的视图

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

我得到一大堆记录。但是对于SQLAlchemy,我只获得第一个。但在计数是正确的数字。我不知道为什么。

这是我的SQLAlchemy代码。

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() 

回答

8

如果你映射ViewMyTable,查询将只返回有一个完全非NULL主键列。此行为特定于版本0.5和更低版本 - 在0.6上,如果任何列在主键中具有非NULL,则该行将转换为实例。指定标志allow_null_pks=True到的映射器,以确保部分主键仍算:

mapper(ViewMyTable, myview, allow_null_pks=True) 

如果返回OTOH行有主键的所有空,然后SQLAlchemy的不能创建一个实体,因为它不能把它放到身份地图。您可以通过查询具体列表来获取单个列:

for id, index in session.query(ViewMyTable.id, ViewMyTable.index): 
    print id, index