[英]SQLAlchemy, self-referential secondary table association
我正在尝试在SQLAlchemy中创建“产品”对象,到目前为止,我已经使所有工作都可以接受产品的“附件”。 我所拥有的是一种产品,其中包含字段/值对的列表(例如,容量:12 L等),以及整数ID和目录号。 我希望能够将某些“附件”与给定的产品相关联,而这些附件也是产品。 本质上,我只需要一个具有product_id和annex_id的关联表,它们都引用Products表中的ID。 这是我到目前为止的内容:
product_accessories=Table('product_accesssories',Base.metadata,\
Column('product_id',Integer,ForeignKey('product.product_id')),\
Column('accessory_id',Integer,ForeignKey('product.product_id')))
class Product(Base):
__tablename__='product'
id=Column('product_id',Integer,primary_key=True)
catNo=Column('catalog_number',String(20))
fields=relationship('ProductField')
accessories=relationship('Product',secondary=product_accessories)
我收到错误“无法确定关系Product.accessories的父/子表之间的联接条件”。 我已经试着摆弄一堆,却没能到达任何地方。 我不想失去对产品的独特引用,我觉得应该有一种比将配件包装在另一类中更简单的方法。
任何帮助将不胜感激!
import sqlalchemy as sa
from sqlalchemy import orm
products_table = sa.Table('products', metadata,
sa.Column('id', sa.Integer(), primary_key=True),
sa.Column('catalog_number', sa.String(20)),
)
accessories_table = sa.Table('product_accessories', metadata,
sa.Column('product_id', sa.ForeignKey(products_table.c.id), primary_key=True),
sa.Column('accessory_id', sa.ForeignKey(products_table.c.id), primary_key=True),
)
class Product(object):
pass
class Accessory(object):
pass
orm.mapper(Product, products_table, properties=dict(
accessories=orm.relation(Accessory,
primaryjoin=(products_table.c.id == accessories_table.c.product_id),
secondaryjoin=(products_table.c.id == accessories_table.c.accessory_id),
),
))
orm.mapper(Accessory, accessories_table)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.