我有一个问题,我使用以下内容:
class Docs(Base):
__tablename__ = "docs"
__table__ = Table(__tablename__, Base.metadata,
Column("dID", Integer, primary_key=True),
Column("d_type", Integer, primary_key=True),
Column("d_category", Integer, primary_key=True),
autoload_with=get_global_db_engine())
__table_args__ = (UniqueConstraint("dID", "d_type", "d_category"),)
# Class Globals
COLUMNS = __table__.columns.keys()
问题是,当我遍历COLUMNS
时 - 它没有列出所有 __table__
的列,它只包含我在Table
内预定义的列{1}}(3个小册子)。
如何让COLUMNS
返回所有这些内容?
答案 0 :(得分:0)
您必须设置extend_existing
以使用反射列扩展已定义的表格。
来自documenation:
Table.extend_existing也将与Table.autoload一起使用,以对数据库运行新的反射操作,即使目标MetaData中已存在同名的表;新反映的列对象和其他选项将添加到表的状态,可能会覆盖现有列和同名选项。
所以,
__table__ = Table(__tablename__, Base.metadata,
Column("dID", Integer, primary_key=True),
Column("d_type", Integer, primary_key=True),
Column("d_category", Integer, primary_key=True),
extend_existing=True,
autoload_with=get_global_db_engine())
应该这样做。