【发布时间】:2011-08-11 00:34:19
【问题描述】:
我已阅读有关构建多对多关系的 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 对象的列表?
【问题讨论】:
-
sqlalchemy.org/docs/orm/extensions/associationproxy.html 非常冗长并且有很多例子。不知道这里还需要什么。
-
关联代理不是我想要的。我用表一替换了 ItemDetial 类声明,并在关系函数中使用了辅助参数
标签: python many-to-many sqlalchemy associations