我的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)
答案 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之外,您还必须查看文档并了解该操作的作用。