python - SQLAlchemy,自引用二级表关联

标签 python sqlalchemy

我正在尝试在 SQLAlchemy 中创建一个“Product”对象,到目前为止,我已经让所有工作都接受了 Product 的“accessories”。我所拥有的是一个带有字段/值对列表的产品(即容量:12 L 等),以及整数 ID 和目录号。我希望能够将某些“配件”与给定产品相关联,其中这些配件也是产品。本质上,我只想要一个包含 product_id 和 accessory_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)

关于python - SQLAlchemy,自引用二级表关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3480602/

相关文章:

python - 为什么我无法将列名称添加到数据框中?

Python:如何将列表写入文件,然后稍后将其拉回内存(dict表示为字符串转换为dict)?

python - 从 Django 1.4 升级到 1.6 后在管理中保存对象时列出索引超出范围错误

python - 如何在 Selenium 中找到这些复选框元素

python - NLTK "generate"函数 : How to get back returned text?

python - 无法通过 Gino (异步 sqlalchemy 包装器)连接到 SQLite 数据库

python - begin_nested() 是否自动回滚/提交?

python - Flask sqlalchemy 过滤每个对象的关系中的对象

python - 如何在sqlalchemy中选择多列联接的特定列?

python - 如何在flask中使用after_request关闭数据库连接和python?