Я вернулся с еще одной ошибкой 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