Проблемы SQLAlchemy объекта связи «многие ко многим» - PullRequest
0 голосов
/ 13 ноября 2018

Я вернулся с другим вопросом 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'>'

РЕДАКТИРОВАТЬ:

Я считаю, что я ищу "двунаправленный многие ко многим" с объектом ассоциации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...