python - SQLAlchemy Postgres 查询是 JSON 中存在的键

标签 python json postgresql psycopg2

我有一个模型定义:

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 中实现这一点

最佳答案

每当我不确定如何使用 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 支持。

引用:

关于python - SQLAlchemy Postgres 查询是 JSON 中存在的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44397358/

相关文章:

python - 使用 itertools.accumulate 计算后缀最大值

python - 单独浏览一个列表

javascript - 将 Backbone.js JSON 响应填充到嵌套集合/模型内的嵌套集合中

android - JsonReader 不能正确解析字符串数组

javascript - 如何在 JSON 中查找对象键的索引

python - 如何在 Django 中使用基于类的 View 从 models.py 调用函数?

mysql - Postgres 相当于 MySQL 的 BENCHMARK() 函数

mysql - Slick 2 中的多个 PostgreSQL 数据库(同一服务器)访问

sql - 使用 SQL 查询返回每周创建的工单数量

python - 如果 Pandas 中字符串的开头和结尾可用,如何有效删除字符?