Я испытываю наихудшие времена, пытаясь заставить объединение многих-многих работать с использованием моделей в SQLAlchemy. Я нашел много примеров в Интернете, но я не могу понять, представляют ли их строки имена столбцов, которые им нравятся, в сравнении с тем, что есть в таблицах базы данных, или они используют Table
вместо декларативного модель, или что-то еще отличается, и их пример просто не работает. В настоящее время у меня есть следующие настройки:
- Таблицы базы данных TAG_TEST, TAG и TEST
- TAG_TEST имеет TS_TEST_ID, TG_TAG_ID и TG_TYPE (внешние ключи)
- TAG имеет TG_TAG_ID и TG_TYPE
- TEST имеет TS_TEST_ID
У меня есть следующие модели:
class Test(Base):
from .tag import Tag
from .tag_test import TagTest
__tablename__ = u'TEST'
id = Column(u'TS_TEST_ID', INTEGER(), primary_key=True, nullable=False)
...
tags = relationship(Tag, secondary='TAG_TEST')
class Tag(Base):
from .tag_test import TagTest
__tablename__ = "TAG"
id = Column(u'TG_TAG_ID', INTEGER(), primary_key=True, nullable=False)
type = Column(u'TG_TYPE', VARCHAR(25))
...
tests = relationship("Test", secondary='TAG_TEST')
class TagTest(Base):
__tablename__ = u'TAG_TEST'
tagID = Column(u'TG_TAG_ID', INTEGER(), ForeignKey("TAG.TG_TAG_ID"), primary_key=True, nullable=False)
testID = Column(u'TS_TEST_ID', INTEGER(), ForeignKey("TEST.TS_TEST_ID"), primary_key=True, nullable=False)
tagType = Column(u'TG_TYPE', VARCHAR(50), ForeignKey("TAG.TG_TYPE"), primary_key=True, nullable=False)
...
tag = relationship("Tag", backref="testLinks")
test = relationship("Test", backref="tagLinks")
В настоящее время я получаю следующую ошибку:
ArgumentError: Не удалось определить условие соединения между родительскими / дочерними таблицами в отношениях Tag.tests. Укажите выражение «primaryjoin». Если присутствует «вторичный», то также требуется «вторичное соединение».
Что я пропускаю / делаю неправильно?