没有链接表/模型的多对多关系

时间:2012-04-21 23:08:11

标签: python sqlalchemy flask flask-sqlalchemy

我有一个模型User和一个模型ThingUser可以拥有零个或多个Thing个。 Thing可能由零个或多个User拥有。通常我会添加第三个表Thing_OwnershipUser添加到Thing,但我想利用SQLAlchemy的backref功能,以便我有一个User实例george我可以致电george.inventory获取属于Thing的{​​{1}}个列表。

最好的方法是什么,或者我应该添加第三个模型并实施george作为搜索相关关系的第三个User.inventory模型?

1 个答案:

答案 0 :(得分:3)

查看SQLAlchemy关于Many to Many关系的文档 - 它应该完全符合您的要求。

因此,如果您有UserThing的模型,则可以在关系中设置辅助参数:

from sqlalchemy import Table, Integer, Column, ForeignKey
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

association_table = Table('association', Base.metadata,
    Column('user_id', Integer, ForeignKey('user.id')),
    Column('thing_id', Integer, ForeignKey('thing.id'))
)

class User(Base):
    __tablename__ = 'user'
    # Whatever you need in this model
    inventory = relationship('Thing', secondary = association_table, backref = 'users')

class Thing(Base):
    __tablename__ = 'thing'
    # Whatever you need in this model

然后,您可以通过调用Thing来访问属于User george george.inventory backref的{​​{1}}列表。

希望这有帮助。

编辑:重新阅读您的问题并看到您想使用{{1}} - 添加代码来执行此操作 编辑2:遗漏了一个非常重要的部分。