使用 SQLAlchemy 刷新物化视图

Refreshing a materialized view with SQLAlchemy

我有以下设置:

Postgres

在 Postgres (Aurora) 中,我设置了物化视图。由于只允许视图的所有者刷新它,我还创建了以下函数以允许其他用户刷新它:

CREATE OR REPLACE FUNCTION refresh_views()
    RETURNS void
    SECURITY DEFINER
AS
$$
BEGIN
    REFRESH MATERIALIZED VIEW my_schema.my_view with data;
    RETURN;
END;
$$ LANGUAGE plpgsql;

当我转到 SQL 终端和 运行 下一行时,视图按预期刷新:

SELECT refresh_views();

Python

我们将 Python 与 SQLAlchemy/Pandas 结合使用,并且在大多数情况下效果非常好。但是,我似乎无法从 Python 得到它的正常工作。 运行 以下的两个版本都没有问题,花费的时间大致相同(约 1 分钟),但之后视图不会更新。

cxn.execute(text("SELECT refresh_views();"))
pd.read_sql(text("SELECT refresh_views();"), cxn)

知道为什么这不起作用吗?

您应该在连接结束时调用提交。命令 SQL 终端处于 autcommit=True 模式,而会话具有默认 autocommit=False.

这个post是关于你的问题: