Relación SQLAlchemy de muchos a muchos en tablas declarativas

Tengo las siguientes tablas definidas declarativamente (versión muy simplificada):

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 

El perfil está vinculado a la pregunta a través de una relación de muchos a muchos. En la tabla de vinculación (Respuesta) necesito almacenar un valor para la respuesta.

La documentación dice que necesito usar un objeto de asociación para hacer esto, pero me confunde y no puedo hacer que funcione.

¿Cómo defino la relación de muchos a muchos para las tablas de Perfil y de Preguntas utilizando la Respuesta como la tabla intermedia?

La documentación dice que necesito usar un objeto de asociación para hacer esto, pero me confunde y no puedo hacer que funcione.

Está bien. Y la clase Respuesta es su objeto de asociación, ya que se asigna a la tabla de asociación “respuesta”.

¿Cómo defino la relación de muchos a muchos para las tablas de Perfil y de Preguntas utilizando la Respuesta como la tabla intermedia?

El código que has presentado en tu pregunta es correcto. Solo necesita información adicional sobre las relaciones en el nivel de 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") ... 

Además, no debe configurar los valores de profile_id y question_id en la función de inicio de su contestador , ya que es el ORM el responsable de configurarlos según sus asignaciones a los atributos de relación de sus objetos.

Es posible que le interese leer documentación para declarativos , especialmente la parte sobre configuración de relaciones . Leer sobre el trabajo con objetos relacionados también puede ser útil.