【问题标题】:When did sqlalchemy execute the query?sqlalchemy 何时执行查询?
【发布时间】:2015-07-22 21:46:49
【问题描述】:

由于我最近才开始学习使用 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” 中,根本没有函数调用,怎么会发生这种情况?

【问题讨论】:

    标签: sql sqlalchemy


    【解决方案1】:

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

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

    另请阅读ORM Tutorial on querying

    【讨论】:

    • 我清楚了,这个触发点很有趣,非常感谢!
    猜你喜欢
    • 2017-04-04
    • 2017-11-05
    • 2016-11-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2021-03-09
    • 2017-01-21
    相关资源
    最近更新 更多