python - 用于多表连接的 SQL Alchemy 映射器
问题描述
我有三张桌子:
Farmer = Table(
"farmer",
metadata,
Column("farmer_id", UUID(), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
)
Fruit = Table(
"fruit",
metadata,
Column("fruit_id", UUID(), primary_key=True, default=uuid.uuid4, unique=True, nullable=False),
Column("farmer_id", UUID(), ForeignKey("farmer.farmer_id"), nullable=False)
)
Vegetable = Table(
"vegetable",
Column("vegetable_id", UUID(), primary_key=True, default=uuid.uuid4, unique=True, nullable=False),
Column("farmer_id", UUID(), ForeignKey("farmer.farmer_id"), nullable=False)
)
AFarmer
可以有 0-nFruit
和/或 0-n Vegetables
。
鉴于farmer_id
我想获取农民的详细信息(为简洁起见,上面省略了其他列)以及他们可能种植的所有水果/蔬菜的所有详细信息,SQL 将是:
SELECT *
FROM farmer LEFT OUTER JOIN fruit ON farmer.farmer_id = fruit.farmer_id LEFT OUTER JOIN vegetable ON farmer.farmer_id = vegetable.farmer_id WHERE farmer_id = ?;
我可以使用 SQLAlchemy 核心查询来复制它,如下所示:
query = select(
[Farmer, Fruit, Vegetable]
).select_from(
Farmer.join(
Fruit, Farmer.c.farmer_id == Fruit.c.farmer_id,
isouter=True
).join(
Vegetable, Farmer.c.farmer.id == Vegetable.c.farmer_id,
isouter=True
)
).where(
Farmer.c.farmer_id == ?
)
我不确定的是如何将此查询的结果映射到对象中。我似乎需要使用 amapper
和一些类,但我不确定如何使用多个连接来做到这一点。
如何编写映射器以获取上述查询的结果并沿以下行生成对象图:
class FarmerObject:
fruits = [...]
vegetables = [...]
解决方案
推荐阅读
- node.js - 当猫鼬尝试使用节点js连接到heroku mlab mongo db时出现h12错误,为什么?
- ios - 打开谷歌地图并添加多个图钉
- asp.net - 在 Linq 查询中比较整数数组
- influxdb - 触发警报时如何添加具有默认值的 field_key?
- azure - Azure 表存储作为数据工厂行键中的接收器
- android - 菜单项图标更改颜色
- stata - 如何在 ivreg 模型中包含虚拟变量?
- c# - 从已发布的应用程序创建项目
- python - Python37 和 Django 2 TextField 不是字符串?
- python - 将 XML 分解为多个表