Python 没有链接表/模型的多对多关系
我有一个型号Python 没有链接表/模型的多对多关系,python,sqlalchemy,flask,flask-sqlalchemy,Python,Sqlalchemy,Flask,Flask Sqlalchemy,我有一个型号用户和一个型号东西。用户可以拥有零个或多个东西s。一件物品可能归零个或多个用户s所有。通常我会添加第三个表Thing\u Ownership链接Users到Things,但我想利用SQLAlchemy的backref功能,这样如果我有用户实例george我就可以调用george.inventory来获取属于我的Thing的列表george 最好的方法是什么,或者我应该只添加第三个模型并实现User.inventory作为搜索第三个对象\u Ownership模型的相关关系吗?查看SQ
用户
和一个型号东西
。用户
可以拥有零个或多个东西
s。一件物品
可能归零个或多个用户
s所有。通常我会添加第三个表Thing\u Ownership
链接User
s到Thing
s,但我想利用SQLAlchemy的backref功能,这样如果我有用户实例george
我就可以调用george.inventory
来获取属于我的Thing
的列表george
最好的方法是什么,或者我应该只添加第三个模型并实现User.inventory
作为搜索第三个对象\u Ownership
模型的相关关系吗?查看SQLAlchemy关于关系的文档-它应该完全满足您的需求
因此,如果您有用户
和事物
的模型,您可以在关系中设置一个次要参数:
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
然后,您可以通过调用george.inventory
来访问属于用户的物品
列表,这些物品被实例化为george
希望这有帮助
编辑:重新阅读您的问题,发现您想使用backref
-添加了代码来执行此操作。
编辑2:省略了一个非常重要的部分。查看SQLAlchemy关于关系的文档-它应该完全满足您的需求
因此,如果您有用户
和事物
的模型,您可以在关系中设置一个次要参数:
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
然后,您可以通过调用george.inventory
来访问属于用户的物品
列表,这些物品被实例化为george
希望这有帮助
编辑:重新阅读您的问题,发现您想使用backref
-添加了代码来执行此操作。
编辑2:遗漏了一个非常重要的部分