【问题标题】:Does the order of slqalchemy commands have an effect on the resulting sql query?sqlalchemy 命令的顺序对生成的 sql 查询有影响吗?
【发布时间】:2020-05-20 01:18:00
【问题描述】:

我的 sqlalchemy 查询中的命令顺序是否会影响生成的 sql 查询中的操作顺序?

例如这是吗

result = db.session.query(Class, Student, SpecialNeed) \
                    .filter(Student.age > 10,
                        Student.class_id == Class.id) \
                    .outerjoin(SpecialNeed, \
                        and_(SpecialNeed.student_id == Student.id , \
                            SpecialNeed.valid == True))

和这个一样吗?

result = db.session.query(Class, Student, SpecialNeed) \
                    .outerjoin(SpecialNeed, \
                        and_(SpecialNeed.student_id == Student.id , \
                            SpecialNeed.valid == True))\
                    .filter(Student.age > 10,
                        Student.class_id == Class.id)

这是吗

result = db.session.query(Class, Student, SpecialNeed) \
                    .filter(Student.age > 10) \
                    .filter(Student.class_id == Class.id)

和这个一样吗?

result = db.session.query(Class, Student, SpecialNeed) \
                    .filter(Student.age > 10,
                        Student.class_id == Class.id)

【问题讨论】:

标签: python sqlalchemy


【解决方案1】:

在您的情况下,不是,两种情况下的查询都是相同的。前两个相同due to how SQL works;首先是FROM 列表,然后是WHERE,依此类推。与 SQLAlchemy 中的 Query 构建器模式相比,SQL 仅具有严格的语法来规定子句的顺序。在后面的查询中filter(x, y)filter(x).filter(y) 相同,都产生x AND y

SQLAlchemy 中有Query 方法确实依赖于顺序或影响其他操作的顺序,例如Query.filter_by()Query.from_self()。 SQLthat depend on the order of operands中也有操作,如LEFT JOIN

所以标题的答案是:可以,但并非总是如此。除了了解底层 SQL 之外,您还必须查看文档并了解操作的作用。

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 1970-01-01
    • 2011-04-18
    • 2015-05-31
    • 1970-01-01
    • 2019-09-14
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多