Мне определили следующие таблицы декларативно (очень упрощенная версия):
class Profile(Base):
__tablename__ = 'profile'
id = Column(Integer, primary_key = True)
name = Column(String(65), nullable = False)
def __init__(self, name):
self.name = name
class Question(Base):
__tablename__ = 'question'
id = Column(Integer, primary_key = True)
description = Column(String(255), nullable = False)
number = Column(Integer, nullable = False, unique = True)
def __init__(self, description, number):
self.description = description
self.number = number
class Answer(Base):
__tablename__ = 'answer'
profile_id = Column(Integer, ForeignKey('profile.id'), primary_key = True)
question_id = Column(Integer, ForeignKey('question.id'), primary_key = True)
value = Column(Integer, nullable = False)
def __init__(self, profile_id, question_id, value):
self.profile_id = profile_id
self.question_id = question_id
self.value = value
Профиль связан с Вопросом через many-many отношения. В связывающей таблице (Ответ) я должен сохранить значение для ответа.
В документации говорится, что я должен использовать объект ассоциации сделать это, но она смущает меня, и я не могу заставить ее работать.
Как я определяю many-many отношения для таблиц Profile и Question с помощью Ответа в качестве посреднической таблицы?
в документации говорится, что мне нужно использовать объект ассоциации, чтобы сделать это, но это сбивает меня с толку, и я не могу этого понять работать.
Верно. А класс 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")
...
Кроме того, вам не следует устанавливать значения для profile_id и question_id в функции init вашего ответа , потому что ORM отвечает за их настройку на основе о ваших присвоениях атрибутам отношений ваших объектов.
Возможно, вам будет интересно прочитать документацию по декларативным , особенно часть о настройке отношений . Также может быть полезно прочитать о работе со связанными объектами .