Я вернулся с другим вопросом SQL Alchemy ..
Так что у меня есть отношение многие ко многим между двумя классами: набором данных и столбцом (игнорируем очевидные ужасные имена).
Раньше я использовал таблицу ассоциаций, и все работало отлично.Но теперь мне нужно добавить дополнительный столбец в эту таблицу сопоставлений, чтобы мне пришлось преобразовать таблицу в объект.
Я следую за документами, но получаю эту ошибку:
AssertionError: Attribute 'datasets' on class '<class 'test_models.Table'>' doesn't handle objects of type '<class 'test_models.Dataset'>'
Моя настройка
class Dataset(BASE):
__tablename__ = 'dataset'
dataset_id = Column(INTEGER(10), primary_key=True, unique=True, nullable=False)
dataset_name = Column(Text, nullable=False)
dataset_title = Column(Text)
dataset_comment = Column(Text)
tables = relationship('Dataset_Table',
back_populates='datasets')
class Table(BASE):
__tablename__ = 'table'
table_id = Column(INTEGER(11), primary_key=True, unique=True, nullable=False)
table_name = Column(Text, nullable=False)
table_group = Column(Text)
table_description = Column(Text)
table_longitudinal = Column(Enum('S', 'Y', 'N', 'L'))
datasets = relationship('Dataset_Table',
back_populates='tables')
Вот ссылка на полную трассировку стека: https://pastebin.com/NHgLCWq6
Мой подход неверен?Что я делаю неправильно?Я просто хочу, чтобы мои многие ко многим работали с ассоциативной таблицей, как и раньше, с таблицей ассоциации, но с объектом ассоциации
РЕДАКТИРОВАТЬ:
Я извиняюсь, я не включил ассоциациюТаблица, связывающая две таблицы выше вместе:
class Dataset_Table(BASE):
__tablename__ = 'dataset_table'
id = Column('id', INTEGER, primary_key=True, unique=True, nullable=False)
dataset_id = Column('dataset_id', INTEGER, ForeignKey('dataset.dataset_id'), nullable=False)
table_id = Column('table_id', INTEGER, ForeignKey('table.table_id'), nullable=False)
position = Column(INTEGER, nullable=False)
datasets = relationship('Dataset',
back_populates='tables')
tables = relationship('Table',
back_populates='datasets')
Как вы можете видеть, это стандартная схема "многие ко многим со спиной населения" , как это
Я помещаюполная трассировка стека ниже:
Traceback (most recent call last):
File "/Users/kevin.dasilva/SQL_tings/SQL_ingest.py", line 103, in <module>
sess.add_all(objs)
File "/Users/kevin.dasilva/SQL_tings/SQL_env/lib/python3.6/site-
packages/sqlalchemy/orm/session.py", line 1785, in add_all
self.add(instance, _warn=False)
File "/Users/kevin.dasilva/SQL_tings/SQL_env/lib/python3.6/site-
packages/sqlalchemy/orm/session.py", line 1776, in add
self._save_or_update_state(state)
File "/Users/kevin.dasilva/SQL_tings/SQL_env/lib/python3.6/site-
packages/sqlalchemy/orm/session.py", line 1795, in
_save_or_update_state
halt_on=self._contains_state):
File "/Users/kevin.dasilva/SQL_tings/SQL_env/lib/python3.6/site-
packages/sqlalchemy/orm/mapper.py", line 2870, in cascade_iterator
visited_states, halt_on))
File "/Users/kevin.dasilva/SQL_tings/SQL_env/lib/python3.6/site-
packages/sqlalchemy/orm/relationships.py", line 1591, in
cascade_iterator
c.__class__
AssertionError: Attribute 'datasets' on class '<class
'test_models.Table'>' doesn't handle objects of type '<class
'test_models.Dataset'>'
РЕДАКТИРОВАТЬ:
Я считаю, что я ищу "двунаправленный многие ко многим" с объектом ассоциации