slqalchemy命令的顺序对生成的sql查询有影响吗?

时间:2020-05-19 15:52:45

标签: python sqlalchemy

我的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)

1 个答案:

答案 0 :(得分: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()。还有SQL that depend on the order of operands中的操作,例如LEFT JOIN

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