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
语句)
到此时为止,将构建查询(通过 filter
、limit
等)。
由于最近才开始学习使用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
语句)
到此时为止,将构建查询(通过 filter
、limit
等)。