通过 SQL Alchemy 创建超表

wfa*_*wer 8 python sqlalchemy timescaledb

我们当前的项目在很大程度上依赖于 SQL Alchemy 来创建表/插入数据。我们想切换到 timescaledb 的超表,但似乎推荐的创建超表的方法是执行

create_hypertable

命令。我需要能够动态创建表,因此为每个创建的表手动执行此操作并不是一个真正的选择。处理转换的一种方法是运行 python 脚本发送 psycopg2 命令将所有新创建的表转换为超级表,但这似乎有点笨拙。timescaledb 在创建超表方面是否提供与 SQL Alchemy 的任何集成?

eer*_*ika 9

下面是一个使用事件触发器创建超级表的实际例子:

from sqlalchemy import Column, Integer, DateTime, event, DDL, orm

Base = orm.declarative_base()

class ExampleModel(Base):
    __tablename__ = 'example_model'

    id = Column(Integer, primary_key=True)
    time = Column(DateTime)


event.listen(
    ExampleModel.__table__,
    'after_create',
    DDL(f"SELECT create_hypertable('{ExampleModel.__tablename__}', 'time');")
)
Run Code Online (Sandbox Code Playgroud)


小智 5

我们目前不提供与 SQL Alchemy 的任何特定集成(广泛或专门用于创建超表)。我们总是对听取新功能请求感兴趣,因此如果您想在我们的 Github 上发布您的问题/用例,它将帮助我们更好地跟踪它以备将来工作。

可能适用于您的用例的一件事是创建一个在表创建时执行的事件触发器。您必须检查它是否在正确的架构中,因为 TimescaleDB 动态创建自己的块表,并且您不希望将它们转换为超表。

有关事件触发器的更多信息,请参阅此答案: 在创建表时执行触发器