sqlalchemy什么时候执行查询?

时间:2015-05-12 06:52:37

标签: sql sqlalchemy

由于我刚开始学习使用sqlalchemy,以下代码的结果让我对sqlalchemy执行查询时感到困惑:

query = db.session.query(MyTable)
query = query.filter(...)    
query = query.limit(...)   
query = query.offset(...)    
records = query     #records=query.all()
for r in records:
    #do something

注意行

records = query #records=query.all()

当使用“query”“query.all()”时,似乎它带来了相同的正确结果(存储在变量“records”中),我不知道什么时候是执行了查询吗?

如果在第一行“db.session.query(MyTable)”期间执行,则此时结果集可能很大;如果在第五行“records = query”期间,怎么会发生这种情况,因为根本没有函数调用?

1 个答案:

答案 0 :(得分:2)

在您的示例中,查询将在for r in records上执行。通过迭代器访问查询对象会触发执行。 (通常,只有这样才能编译成SELECT语句)

在此之前,将构建查询(通过filterlimit等)。

请同时阅读ORM Tutorial on querying