【发布时间】:2015-07-06 11:05:24
【问题描述】:
我正在关注使用 automap 反映数据库表的 sqlalchemy 文档:http://docs.sqlalchemy.org/en/latest/orm/extensions/automap.html#generating-mappings-from-an-existing-metadata。
当我没有指定架构并且 Postgres 使用默认的 public 架构时,这会按预期工作,并且我会找到我的表的名称:
>>> m = MetaData()
>>> b = automap_base(bind=engine, metadata=m)
>>> b.prepare(engine, reflect=True)
>>> b.classes.keys()
['ads', 'spatial_ref_sys', 'income']
但是当我指定一个显式架构时,我无法再访问Base.classes 中的表。
>>> m = MetaData(schema='geography')
>>> b = automap_base(bind=engine, metadata=m)
>>> b.prepare(engine, reflect=True)
>>> b.classes.keys()
[]
虽然元数据反映正确:
>>> b.metadata.tables
immutabledict({geography.usa_cbsa_centroids': Table('usa_cbsa_centroids', MetaData(bind=Engine(postgresql://asteroids:***@localhost:5432/asteroids)), Column('GEOID', VARCHAR(length=5), table=<u
sa_cbsa_centroids>, nullable=False), ...})
请注意,表和列仅在运行时才知道。
【问题讨论】:
标签: postgresql sqlalchemy psycopg2