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

时间:2014-06-30 18:23:10

标签: python postgresql sqlalchemy

情况是我在postgresql表中有一个JSON列类型。我想在json中的一个或多个键上创建索引。我相信我知道如何使用sql来做到这一点(旁注:我的印象是你必须使用jsonb来根据postgresql docs进行这种索引。不会这样做。似乎就是这样。)

为了保持一致性,我想通过sqlalchemy这样做,但我没有看到如何在他们的文档中提到这一点。这可能吗?

1 个答案:

答案 0 :(得分:7)

我已经找到了这个问题的答案。正如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)

最初的答案来自SQLAlchemy google小组中的Mike Bayer,您可以找到here