python - slqalchemy 命令的顺序对生成的 sql 查询有影响吗?
问题描述
我的 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)
解决方案
在您的情况下,否,两种情况下的查询都是相同的。由于 SQL 的工作方式,前两个是相同的;首先是FROM
列表,然后WHERE
是 ,依此类推。Query
与SQLAlchemy中的构建器模式相比,SQL 只是具有严格的语法来规定子句的顺序。在后面的查询filter(x, y)
中是一样的filter(x).filter(y)
,都产生x AND y
。
SQLAlchemy 中有一些Query
方法确实依赖于顺序或影响其他操作的顺序,例如Query.filter_by()
, 和Query.from_self()
。SQL 中还有一些依赖于操作数顺序的操作,例如LEFT JOIN
.
所以标题的答案是:它可以,但并非总是如此。除了了解底层 SQL 之外,您还必须查看文档并了解操作的作用。
推荐阅读
- javascript - 如何禁用选择器(Bootstrap-Select)的实际“下拉”?
- swift - iOS13 UIAlertController 具有自定义视图和首选样式作为操作表灰度所有颜色
- python - 寻找工资帽的空间复杂度
- python - 如何在不删除瓷砖的情况下在 folium 地图上创建单选按钮?
- javascript - 从特定 DOM 部分搜索数据
- makefile - 在多个目录上并行执行
- python-3.x - 如何序列化列表中的转义字符串
- leaflet - Leaflet中的Zoomlevel 19 =灰色瓷砖
- c - jpg 的不正确,混合了多个图像。谁能告诉我怎么了?“恢复”
- python - 有条件地填充 pandas 数据框会导致空的 DataFrame