[英]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.