gpt4 book ai didi

python - SQLAlchemy:声明式 ORM - 使用 GIST 和 TSRANGE 构建索引

转载 作者:行者123 更新时间:2023-11-28 21:40:52 25 4
gpt4 key购买 nike

我想在 sql 中建立一个本质上看起来像这样的索引:

CREATE INDEX IF NOT EXISTS new_index ON schema.tablename USING gist (tsrange(start, "end"))

我的声明性 ORM 模型看起来像这样:

import sqlalchemy as sa

class Tablename(Mixins):

__table_args__ = (
sa.Index('index_name', postgresql_using="gist"), # ????
{'schema': 'schema'}
)

start = sa.Column(pg.TIMESTAMP, autoincrement=False, primary_key=True)
end = sa.Column(pg.TIMESTAMP, nullable=False)

稍后,我想使用 alembic,它应该包括降级,例如:

 op.drop_index('index', 'tablename', schema='schema')

实际上有以下 SQL:

 DROP INDEX IF EXISTS schema.index

最佳答案

SQLAlchemy 的索引支持传递 SQL function expressions ,假设后端支持功能索引:

import sqlalchemy as sa

class Tablename(Mixins):

start = sa.Column(pg.TIMESTAMP, autoincrement=False, primary_key=True)
end = sa.Column(pg.TIMESTAMP, nullable=False)

__table_args__ = (
sa.Index('index_name', sa.func.tsrange(start, end),
postgresql_using="gist"),
{'schema': 'schema'}
)

请注意,如果将 __table_args__ 定义移到列属性定义之后,则可以在 SQL 函数表达式中使用它们。

关于python - SQLAlchemy:声明式 ORM - 使用 GIST 和 TSRANGE 构建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45202696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com