【问题标题】:Possible to use a single sqlalchemy session and table across identical schemas?可以跨相同模式使用单个 sqlalchemy 会话和表吗?
【发布时间】:2017-12-12 04:08:59
【问题描述】:

我正在设计一个在其上具有 API 层以从表中获取数据的数据库。数据库是postgres。每天晚上,我们都会做一个批处理 ETL 过程来更新数据库中的数据。由于一些不值得一提的复杂性,ETL 过程涉及清除所有数据并从头开始重建。

显然,这对 API 来说是有问题的,因为如果 API 在重建阶段查询数据库,数据将会丢失。

我决定使用两种模式来解决这个问题。 “完成”模式(我们称之为模式 A)和“重建”模式(我们称之为模式 B)。我的 ETL 流程如下所示:

1. Create schema B as an exact replica of schema A
2. Completely rebuild the data in schema B
3. In a transaction, drop schema A and rename schema B to schema A

我目前遇到的问题是我正在使用 sqlalchemy Session 和 Table 对象,并且这些表通过它们的元数据绑定到模式 A。

我希望能够做到session.add(obj) 并让它将该数据添加到架构 B。毕竟,架构 A 和架构 B 完全相同,因此表定义应该对两者都有效。

我想知道是否有人对我如何使用 sqlalchemy 的会话对象和/或表对象来动态地选择我应该使用的架构有任何建议。

我仍然希望会话/表指向模式 A,因为在 API 层中重用了相同的代码。我只想在这一步中使用模式 B。

【问题讨论】:

  • 你能设置Model.__table__.schema吗?
  • 谢谢 - 这行得通,但它不是最干净的解决方案。不过它确实给了我一些想法。

标签: python database postgresql session sqlalchemy


【解决方案1】:

我最终通过将表定义包装在接受 sqlalchemy 元数据对象并返回绑定到该元数据对象的表定义的函数中解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2014-06-22
    相关资源
    最近更新 更多