sqlalchemy 什么时候执行查询的?

When did sqlalchemy execute the query?

由于最近才开始学习使用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"[=30= 时会带来相同的正确结果(存储在变量 "records" 中) ],不知道查询是什么时候执行的?

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

在您的示例中,查询在 for r in records 时执行。通过迭代器访问查询对象会触发执行。 (一般情况下,才会编译成SELECT语句)

到此时为止,将构建查询(通过 filterlimit 等)。

另请阅读ORM Tutorial on querying