简体   繁体   English

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

[英]SQLAlchemy Postgres query is key exists in JSON

I have a model Definition :我有一个模型Definition

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

It stores any JSON so I want to query if a given key exists in this field.它存储任何 JSON,因此我想查询此字段中是否存在给定的键。

I need something like:我需要类似的东西:

defs = db.query(Definition).filter(
    Definition.meta.has_key('translation')).all()

MySQL for example has a function named json_contains and I could use it:例如,MySQL 有一个名为json_contains的函数,我可以使用它:

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

How can I achieve this in PostgreSQL我如何在 PostgreSQL 中实现这一点

Whenever I am unsure of how to use the sqlalchemy bits, I hack a version together, and go from there:每当我不确定如何使用 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)])

note:笔记:

psycopg2 changed in version 2.5.4: added jsonb support. psycopg2 在 2.5.4 版中更改:添加了 jsonb 支持。

Referenced:参考:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM