python - Python SQLAlchemy joinload 过滤器参数
问题描述
我正在尝试使用在两个表之间建立左外连接关系,joinedload
但它似乎与使用outerjoin
方法的行为不同。
这是一个使用示例outerjoin
:
stmt = select(ServerFarm)
stmt = stmt.outerjoin(
Server,
(ServerFarm.name == Server.server_farm_id) & (Server.deleted == False)
)
stmt = stmt.filter(ServerFarm.name == name)
print(stmt)
# SELECT ... FROM server_farm
# LEFT JOIN server ON server_farm.name = server.server_farm_id and server.deleted = False
# WHERE server_farm.name = :name
所以当我使用joinedload
它时会发生什么:
stmt = select(ServerFarm)
stmt = stmt.options(
joinedload(
ServerFarm.servers,
(ServerFarm.name == Server.server_farm_id) & (Server.deleted == False)
)
)
stmt = stmt.filter(ServerFarm.name == name)
# SELECT ... FROM server_farm
# LEFT JOIN server ON server_farm.name = server.server_farm_id
# WHERE server_farm.name = :name
在这种情况下,它只是忽略该(Server.deleted == False)
选项。我究竟做错了什么?有没有办法在左外连接上添加“自定义”过滤器joinedload
?如何?
解决方案
推荐阅读
- java - 运行命令“mvn clean package”时出现错误 jython
- python - 如何让 python 读取 txt 文件中的每一行并制作单独的列表?
- react-native - 在按钮上打开 react-native Modal 单击操作表选项
- http - YouTube HTTP 429 仅在一台 PC 上的请求过多?
- linux - Odoo超时杀死cron
- firebase - Firestore 错误 - 无法读取 null 的属性“firestore”
- jsf - p:gmap 不在 ah:form 标签内渲染
- docker - 在 docker 多阶段映像中跨阶段传递环境变量
- r - ggplot2 dotplot如何创建空的x轴类别
- vb.net - 如何将日期、时间和 UTC 偏移量转换为本地日期时间