由于我刚开始学习使用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”期间,怎么会发生这种情况,因为根本没有函数调用?
答案 0 :(得分:2)
在您的示例中,查询将在for r in records
上执行。通过迭代器访问查询对象会触发执行。 (通常,只有这样才能编译成SELECT
语句)
在此之前,将构建查询(通过filter
,limit
等)。