我已经阅读了关于建立多对多关系的 SQLAlchemy 文档和教程,但是当关联表包含超过 2 个外键时,我无法弄清楚如何正确地做到这一点。
我有一个项目表,每个项目都有很多细节。许多项目的详细信息可以相同,因此项目和详细信息之间存在多对多关系
我有以下内容:
class Item(Base):
__tablename__ = 'Item'
id = Column(Integer, primary_key=True)
name = Column(String(255))
description = Column(Text)
class Detail(Base):
__tablename__ = 'Detail'
id = Column(Integer, primary_key=True)
name = Column(String)
value = Column(String)
我的关联表是(它在代码中的其他 2 个之前定义):
class ItemDetail(Base):
__tablename__ = 'ItemDetail'
id = Column(Integer, primary_key=True)
itemId = Column(Integer, ForeignKey('Item.id'))
detailId = Column(Integer, ForeignKey('Detail.id'))
endDate = Column(Date)
在文档中,据说我需要使用“关联对象”。我无法弄清楚如何正确使用它,因为它混合了声明式和映射器形式,而且示例似乎不完整。我添加了以下行:
details = relation(ItemDetail)
作为 Item 类和行的成员:
itemDetail = relation('Detail')
作为关联表的成员,如文档中所述。
当我执行 item = session.query(Item).first() 时,item.details 不是 Detail 对象的列表,而是 ItemDetail 对象的列表。
如何在 Item 对象中正确获取详细信息,即 item.details 应该是 Detail 对象的列表?
原文由 duduklein 发布,翻译遵循 CC BY-SA 4.0 许可协议
从评论中我看到你已经找到了答案。但是对于“新用户”来说,SQLAlchemy 文档实在是太多了,而我也在为同样的问题苦苦挣扎。因此,以供将来参考: