SQLAlchemy 自引用的二级表关联
我正在尝试在SQLAlchemy中创建一个“产品”对象,到目前为止,除了产品的“配件”之外,其他都已经正常工作了。我现在有一个产品,它有一系列的字段/值对(比如容量:12升等),还有一个整数ID和一个目录编号。我希望能够将某些“配件”与特定的产品关联起来,而这些配件也是产品。简单来说,我只想要一个关联表,这个表有产品ID和配件ID,这两个ID都指向产品表中的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”。我尝试了很多方法,但都没有成功。我不想失去对产品的唯一引用,而且我觉得应该有更简单的方法来处理这个问题,而不是把配件放在另一个类里。
任何帮助都将非常感谢!
1 个回答
1
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)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。