0

我在多租户 Flask 应用程序中使用 Sqlalchemy,并且需要在添加新租户时动态创建表。我一直在使用 Table.create 在新的 Postgres 模式中创建单独的表(以及 search_path 修改),并且效果很好。

我发现的限制是,如果当前事务中有任何待处理,Table.create 方法会阻塞。我必须在 .create 调用之前提交事务,否则它会阻塞。它似乎没有在 Sqlalchemy 中被阻止,因为您不能 Ctrl-C 它。您必须终止该进程。所以,我假设它在 Postgres 中更进一步。

我在其他答案中读到 CREATE TABLE 是事务性的并且可以回滚,所以我认为这应该可以工作。我尝试使用当前引擎启动新事务并将其用于表创建(与当前的 Flask 相比),但这也无济于事。

有谁知道如何在没有早期提交的情况下让它工作(并且冒着部分悬空数据的风险)?

这是 Python 2.7、Postgres 9.1 和 Sqlalchemy 0.8.0b2。

4

1 回答 1

3

(复制评论)

假设sess是会话,你可以这样做sess.execute(CreateTable(tenantX_tableY))

编辑:CreateTable只是调用时要做的事情之一table.create()。改为使用table.create(sess.connection())

于 2013-04-02T22:48:33.273 回答