Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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 声明表上的SQLAlchemy多对多关系_Python_Sqlalchemy - Fatal编程技术网

Python 声明表上的SQLAlchemy多对多关系

Python 声明表上的SQLAlchemy多对多关系,python,sqlalchemy,Python,Sqlalchemy,我以声明方式定义了以下表格(非常简化的版本): 配置文件通过多对多关系链接到问题。在链接表(答案)中,我需要为答案存储一个值 文档中说我需要使用关联对象来实现这一点,但这让我感到困惑,我无法让它工作 如何使用Answer作为中间表来定义概要文件和问题表的多对多关系 文档上说我需要使用 执行此操作的关联对象,但 这让我困惑,我无法理解 工作 对。Answer类是您的关联对象,因为它映射到关联表“Answer” 我如何定义多对多 配置文件和 使用答案作为答案的问题表 中间表 您在问题中提供的代码是正

我以声明方式定义了以下表格(非常简化的版本):

配置文件通过多对多关系链接到问题。在链接表(答案)中,我需要为答案存储一个值

文档中说我需要使用关联对象来实现这一点,但这让我感到困惑,我无法让它工作

如何使用Answer作为中间表来定义概要文件和问题表的多对多关系

文档上说我需要使用 执行此操作的关联对象,但 这让我困惑,我无法理解 工作

对。Answer类是您的关联对象,因为它映射到关联表“Answer”

我如何定义多对多 配置文件和 使用答案作为答案的问题表 中间表

您在问题中提供的代码是正确的。它只需要关于ORM级别的关系的附加信息:

from sqlalchemy.orm import relationship

...

class Profile(Base):
    __tablename__ = 'profile'

    ...

    answers = relationship("Answer", backref="profile")

    ...


class Question(Base):
    __tablename__ = 'question'

    ...

    answers = relationship("Answer", backref="question")

    ...
另外,您不应该在答案的init函数中设置profile\u id和question\u id的值,因为ORM负责根据您对对象的关系属性的分配相应地设置它们


您可能对阅读感兴趣,尤其是关于的部分。阅读有关的内容也可能有帮助。

编辑以修复文档的断开链接。这看起来不太正确。您的答案看起来只是通过多对一关系将每一方链接到关联表。这里没有提到多对多,即以下用法意味着orm级别的多对多:Profile。questions@ZoranPavlovic打开旧伤口,但在直接多对多关系中使用
Answer
作为次要的问题是
Answer
包含元信息,或不是两个表之间外键的一部分的列。
from sqlalchemy.orm import relationship

...

class Profile(Base):
    __tablename__ = 'profile'

    ...

    answers = relationship("Answer", backref="profile")

    ...


class Question(Base):
    __tablename__ = 'question'

    ...

    answers = relationship("Answer", backref="question")

    ...