我正在创建一个像这样的 sql alchemy 表:
myEngine = self.get_my_engine() # creates engine
metadata = MetaData(bind=myEngine)
SnapshotTable = Table("mytable", metadata, autoload=False, schema="my schema")
我必须使用 autoload false 因为表可能存在也可能不存在(并且该代码必须在创建表之前运行)
问题是,如果我使用 autoload = False,当我尝试通过 session.query(SnapshotTable)
查询表(在它被另一个进程创建之后)时,我得到:
InvalidRequestError: Query contains no columns with which to SELECT from.
错误;这是可以理解的,因为表格尚未加载。
我的问题是:如何在使用 autoload = False 定义表元数据后“加载”它。
我查看了 schema.py 代码,似乎我可以这样做:
SnapshotTable._autoload(metadata, None, None)
但这对我来说不对...还有其他想法或想法吗?
谢谢
最佳答案
首先声明表模型:
class MyTable(Base):
__table__ = Table('mytable', metadata)
或者直接:
MyTable = Table("mytable", metadata)
然后,一旦您准备好加载它,调用它:
Table('mytable', metadata, autoload_with=engine, extend_existing=True)
这一切的关键在于 extend_existing=True。
所有功劳归功于 SQLAlchemy 邮件列表中的 Mike Bayer。
关于python - sqlalchemy 表模式自动加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43042044/