Ошибка при создании таблицы ассоциации SQL Alchemy - PullRequest
0 голосов
/ 22 октября 2018

Я вернулся с еще одной ошибкой SQL Alchemy для всех вас.Я не уверен, почему я так сильно борюсь с их документацией, или я просто слишком туп, чтобы понять, но, надеюсь, кто-то готов мне помочь.

В настоящее время я пытаюсь создать множество длямного отношений между двумя таблицами;Dataset_Table & Table_Table (игнорируйте странные имена)

Я создал соответствующие классы и добавил таблицу ассоциации с соответствующими параметрами, связывающими два класса и их идентификаторы вместе.

t_dataset_table = Table(
't_dataset_table',
metadata,
Column('id', Integer, primary_key=True),
Column('dataset_id', Integer, ForeignKey('Dataset_Table.dataset_id'), nullable=False),
Column('table_id', Integer, ForeignKey('Table_Table.table_id'), nullable=False)
)


class Dataset_Table(Base):
__tablename__ = 'dataset'

dataset_id = Column(INTEGER(10), primary_key=True)
dataset_name = Column(String(45), nullable=False)
dataset_title = Column(String(45))
dataset_comment = Column(Text, nullable=False)
dataset_is_archived = Column(TINYINT(4), nullable=False, server_default=text("'0'"))
Dataset_date_created = Column(TIMESTAMP)

tables = relationship('Table_Table',
                      secondary=t_dataset_table,
                      back_populates='dataset')

class Table_Table(Base):
__tablename__ = 'table'

table_id = Column(INTEGER(11), primary_key=True, unique=True)
table_group = Column(String(45), nullable=False)
table_name = Column(String(45), nullable=False)
table_description = Column(Text, nullable=False)
table_longitudinal = Column(Enum('S', 'Y', 'N', 'L'))
table_medical_domains = Column(Enum('DERMATOLOGY', 'OPHTHALMOLOGY', 'ORTHOPEDICS', 'PLASTICS', 'ENT', 'GI', 'RHEUMATOLOGY', 'UROLOGY'))
table_is_archived = Column(TINYINT(4), nullable=False, server_default=text("'0'"))

datasets = relationship('Dataset_Table',
                        secondary=t_dataset_table,
                        back_populates='table')

Я создал таблицу ассоциации и два столбца в каждой таблице для обработки своих «потомков» (столбец tables внутри Dataset_Table и столбец dataset в Table_Table).

Я что-то пропустил?

В настоящее время я перебираю некоторые данные JSON и извлекаю данные, создавая экземпляры класса и заполняя этот экземпляр.

with open("cow.json") as js:
    data = json.load(js)

 ds = Dataset_Table 
ds.dataset_comment = data['_comment']
    for tables in data['tables']:
        tb = Table_Table
        tb.table_name = tables['name']

По какой-то причине я получаю сообщение об ошибке при попытке добавить таблицу к этому экземпляру набора данных (ds) ds.tables.append(tb)

Neither 'InstrumentedAttribute' object nor 'Comparator' object 
associated with Dataset_Table.tables has an attribute 'append'

Я не уверен, стоит ли упоминатьчто я, документы, создаю экземпляры своих классов, вызывая класс, т.е. cow = Dataset_Table(), но я делаю это без скобок?

Есть ли разница?Я делаю что-то совершенно не так?Должен ли я просто сдаться и стать мусорщиком?Вы говорите мне.

Большое спасибо за ваше время и помощь.

- EDIT

Ошибка, которую я получаю, когда пытаюсь создать экземпляры моего класса Dataset, т.е.: cow = Dataset_Table(dataset_name = 'cow table')

- это:

sqlalchemy.orm.exc.UnmappedClassError: Class 'sqlalchemy.sql.schema.Table' is not mapped
...