SQLAlchemy ссылается на себя с помощью back_populates ⇐ Python

Программы на Python
Anonymous
SQLAlchemy ссылается на себя с помощью back_populates

Сообщение Anonymous »

Я пытаюсь разработать компактный словарный API и испытываю трудности с базой данных.
И опишите базу таким образом (поля можно исключить, если они не нужны). >
translations = Table(
"translations",
Base.metadata,
Column("left_id", ForeignKey("words.id"), primary_key=True),
Column("right_id", ForeignKey("words.id"), primary_key=True),
)

class Word(Base):
__tablename__ = "words"

id: Mapped[int] = mapped_column(primary_key=True)
value: Mapped[str] = mapped_column(String(24))
translation: Mapped[Set["Word"]] = relationship(
secondary=translations,
primaryjoin=id == translations.c.left_id,
secondaryjoin=id == translations.c.right_id,
lazy="joined",
back_populates="translation",
)

Моя проблема в том, что back_populates не обеспечивает никакой автоматизации.
""" Lets pretend session created here"""
w1 = Word(value="bonjour")
w2 = Word(value="hello")
s.add_all([w1, w2])
w1.translation.add(w2)
await s.commit()

И мой w2.translation — пустой набор.
**Отредактировано
Да, это именованный перевод, но он предполагает отношения «многие ко многим». Теперь я стремлюсь разработать технику, которая соединяет несколько слов вместе.
Отсутствие обратных ссылок приводит к тому, что я перегружаюсь сложностью, поэтому это может быть не очень хорошее решение:def link(session, *args):
for idx, word in enumerate(args[:-1]):
word.translation.add(*[arg for arg in args if arg != word])
# word.translation.add(*args[:idx], *[idx+1:])
session.commit()



Подробнее здесь: https://stackoverflow.com/questions/790 ... -populates

Вернуться в «Python»