使用sqlalchemy在json键上创建索引(表达式索引)

7 投票
1 回答
3133 浏览
提问于 2025-04-18 11:37

情况是这样的,我在一个PostgreSQL表里有一个JSON类型的列。我想在这个JSON里的一个或多个键上创建索引。我觉得我知道怎么用SQL来做到这一点(顺便说一下,我原以为根据PostgreSQL的文档,必须使用jsonb才能进行这种索引,但看起来并不是这样)。

为了保持一致性,我想通过sqlalchemy来实现这个,但我在他们的文档中没有看到相关的说明。这可能吗?

1 个回答

9

我找到了这个问题的答案。正如Craig所提到的,这是一种基于表达式的索引,这在Postgresql 9.3的JSON列类型中得以实现。你可以通过SQLAlchemy以以下方式来完成:

假设有一个叫做MyModel的模型,以及一个名为data的JSON列类型,格式如下:

{"my_key": "my_value"}

要在my_key上创建一个基于表达式的索引,你可以这样做:

index = Index("my_index_name", MyModel.c.data['my_key'].astext)
index.create(engine)

这个问题的最初答案来自于Mike Bayer,他在SQLAlchemy的谷歌小组中提供了这个信息,你可以在这里找到。

撰写回答