用于多表联接的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 (将#修改为@)