Sobes.tech
Back to questions
Junior — Middle
64

Каким образом реализовать связь типа многие-ко-многим в SQLAlchemy 2.0?

Companies where asked
СБЕР Бизнес

Answer from AI

sobes.tech AI

В SQLAlchemy 2.0 связь многие-ко-многим реализуется через вспомогательную таблицу (association table), которая содержит внешние ключи на обе связанные таблицы. Затем в моделях используется параметр relationship с указанием этой таблицы.

Пример:

from sqlalchemy import Table, Column, Integer, ForeignKey
from sqlalchemy.orm import relationship, declarative_base

Base = declarative_base()

association_table = Table(
    'association', Base.metadata,
    Column('left_id', ForeignKey('left.id'), primary_key=True),
    Column('right_id', ForeignKey('right.id'), primary_key=True)
)

class Left(Base):
    __tablename__ = 'left'
    id = Column(Integer, primary_key=True)
    rights = relationship("Right", secondary=association_table, back_populates="lefts")

class Right(Base):
    __tablename__ = 'right'
    id = Column(Integer, primary_key=True)
    lefts = relationship("Left", secondary=association_table, back_populates="rights")

Такой подход позволяет удобно работать с множественными связями между объектами.