python - sqlalchemy 表模式自动加载

标签 python python-2.7 sqlalchemy

我正在创建一个像这样的 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/

相关文章:

python - 在 sqlalchemy 中替代 sqlite 中的 rowid

python - 使用 SqlAlchemy 执行原始查询(在 SQL-Server 数据库和 Pymssql 上)时,传递的参数无法识别并引发 SQL 错误

sqlalchemy - SQLAlchemy,如何向两个表中插入数据并引用外键?

python - Pygame、Python 3 中矩形之间的色键碰撞

python - 如何在 requests.api.request 的 params 中传递字典?

python - 从源代码还是通过Pip安装OpenCV?

python - if else 使用 python 列表推导嵌套 for 循环

python - 如何在不同步的情况下通过 p4python 读取 depot 的文件夹结构?

python-2.7 - 在 OpenCV 2.4 中处理轮廓和边界矩形 - python 2.7

python - 使用列表作为列中的数据类型(SQLAlchemy)