通过SQLAlchemy创建Timescaledb连续聚合

2024-04-29 07:07:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用SQLAlchemy定义、创建和管理的数据库

现在,我需要将几个表转换为TimescaleDB hypertables,这可以通过在factum之后执行原始SQL来实现,但我还需要在我创建的hypertables上创建几个连续聚合

但当我尝试执行存储在文件中的原始SQL时,我得到一个错误:

sqlalchemy.exc.InternalError: (psycopg2.errors.ActiveSqlTransaction) CREATE MATERIALIZED VIEW ... WITH DATA cannot run inside a transaction block

在执行新的sql文件之前有一个commit,但它似乎是不够的

    session.commit()
    sql_file = pkg_resources.resource_filename(
        "db_resource", "sql/test_sql.sql"
    )

    with open(sql_file) as db_file:
        engine.execute(db_file.read())
    session.commit()

已尝试使用创建为的连接执行:

con = engine.connect()

但这并不能解决问题

甚至可以通过创建多个MATERIALIZED VIEWS的SQLAlchemy执行原始sql文件吗

另外,实际上这可能是特定于psycopg2模块的


Tags: 文件数据库dbsql定义sqlalchemysessionpsycopg2