SQLAlchemy Postgres查询是JSON中存在的关键

时间:2017-06-06 18:30:38

标签: python json postgresql psycopg2

我有一个模型Definition

class Definition:
    meta = Column(MutableDict.as_mutable(JSON))

它存储任何JSON,因此我想查询该字段中是否存在给定的密钥。

我需要类似的东西:

defs = db.query(Definition).filter(
    Definition.meta.has_key('translation')).all()
例如,MySQL有一个名为json_contains的函数,我可以使用它:

defs = db.query(Definition).filter(
    func.json_contains(
        Definition.meta, 'translation') == 1).all()

如何在PostgreSQL中实现这一目标

1 个答案:

答案 0 :(得分:1)

每当我不确定如何使用sqlalchemy位时,我一起破解版本,然后从那里开始:

json_select = '''SELECT jdoc->'key_name1', jdoc->'translation'
FROM Definition 
WHERE jdoc @> '{"translation": 1, "key_name1": "hello there"}'
;
'''

print([x for x in db.engine.execute(json_select)])

注意:

psycopg2在版本2.5.4中已更改:添加了jsonb支持。

引用: