如何在SQLAlchemy中对JSON PostgreSQL列的嵌套键创建索引?

2024-10-08 21:16:43 发布

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

这是一个棘手的问题,希望有人能帮助我们所有人,在PostgreSQL中使用SQLAlchemy在JSON(或JSONB)列的嵌套键上发布一个/他们的方法来创建索引(我特别使用Flask SQLAlchemy,但我不认为这对答案有多大影响)。在

我尝试了下面的索引创建的各种排列,从键错误到'c'不是属性,到这个表达式不支持运算符'getitem'。在

任何帮助都将不胜感激。在

# Example JSON, the nested property is "level2_A"
{
    'level1': { 
        'level2_A': 'test value', 
    } 
}

class TestThing(db.Model):
    __tablename__ = 'test_thing'

    id = db.Column(db.BigInteger(), primary_key=True)
    data = db.Column(JSONB)

    __table_args__ = (db.Index('ix_1', TestThing.data['level1']['level2_A']), 
            db.Index('ix_2', data['level1']['level2_A'].astext), 
            db.Index('ix_3', "TestThing.c.data['level1']['level2_A'].astext"), 
            db.Index('ix_4', TestThing.c.data['level1']['level2_A'].astext), 
            db.Index('ix_5', "test_thing.c.data['level1']['level2_A']"), 
                      )

# db.Index('ix_1', TestThing.data['level1']['level2_A'])
# db.Index('ix_2_t', "test_thing.data['level1']['level2_A']")
# db.Index('ix_3', "TestThing.c.data['level1']['level2_A'].astext")
# db.Index('ix_4', TestThing.c.data['level1']['level2_A'].astext)
# db.Index('ix_5', "test_thing.c.data['level1']['level2_A']")

Tags: testjsondbdataindexsqlalchemycolumnjsonb

热门问题