创建SQL炼金术关联表时出错

时间:2018-10-22 18:21:35

标签: python mysql json sqlalchemy flask-sqlalchemy

我又回来了另一个SQL Alchemy错误。我不确定为什么我要在他们的文档上花这么多精力,或者我太笨了以至于无法理解,但希望有人愿意帮助我。

我目前正在尝试在两个表之间创建多对多关系;数据集表和表表(忽略怪异的名称)

我创建了适当的类,并在关联表中添加了将两个类及其ID链接在一起的适当参数。

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')

我已经创建了关联表和每个表中的两列以处理其“子级”(Dataset_Table中的tables列和Table_Table中的dataset列)。

我还想念其他东西吗?

我目前正在遍历一些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'

我不确定是否值得一提的是,我的文档通过调用Class即cow = Dataset_Table()来创建其类的实例,但是我没有括号吗?

有区别吗?我做错了什么吗?我应该放弃做一个垃圾人吗?你告诉我。

非常感谢您的时间和帮助。

-编辑

当我尝试创建Dataset类的实例时遇到的错误:    cow = Dataset_Table(dataset_name = 'cow table')

是:

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

0 个答案:

没有答案