Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 没有链接表/模型的多对多关系_Python_Sqlalchemy_Flask_Flask Sqlalchemy - Fatal编程技术网

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:遗漏了一个非常重要的部分