【发布时间】: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