如何解决用于多表联接的SQL Alchemy映射器
我有三个表:
Farmer = Table(
"farmer",metadata,Column("farmer_id",UUID(),primary_key=True,default=uuid.uuid4,unique=True,nullable=False)
)
Fruit = Table(
"fruit",Column("fruit_id",nullable=False),ForeignKey("farmer.farmer_id"),nullable=False)
)
Vegetable = Table(
"vegetable",Column("vegetable_id",nullable=False)
)
Farmer
可以有0-n个Fruit
和/或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 == ?
)
我不确定的是如何将查询结果映射到对象中。我似乎需要使用mapper
和一些类,但是我不确定如何通过多个联接来做到这一点。
我如何编写一个映射器以获取上述查询的结果并沿着以下方向生成对象图:
class FarmerObject:
fruits = [...]
vegetables = [...]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。