SQLAlchemy不会自动加载我的所有列

时间:2015-07-23 18:43:26

标签: python sqlalchemy

我有一个问题,我使用以下内容:

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返回所有这些内容?

1 个答案:

答案 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())

应该这样做。