You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Django/PostgreSQL查询语句检索嵌套JSON数组?

正确的Django/PostgreSQL查询写法

要查询communications数组中存在name为john或erin的Draft实例,你需要修正ORM的查询语法——Django中没有__*__这种写法,正确的实现方式有两种:

方法一:使用Q对象结合JSON数组包含查询

这是最简洁的ORM写法,利用PostgreSQL JSONB的@>操作符(Django通过__contains映射):

from django.db.models import Q

# 构造查询条件:匹配包含指定name对象的communications数组
query = Q(data__communications__contains=[{'name': 'john'}]) | Q(data__communications__contains=[{'name': 'erin'}])
# 执行查询并统计数量
count = Draft.objects.filter(query).count()

方法二:使用原生SQL查询

如果你更倾向于直接用PostgreSQL的JSON语法,也可以用原生查询:

count = Draft.objects.raw("""
    SELECT * FROM draft 
    WHERE data->'communications' @> '[{"name": "john"}]' 
       OR data->'communications' @> '[{"name": "erin"}]'
""").count()

这两种方法都能正确返回DRAFT1和DRAFT2对应的记录,因为它们分别满足communications数组中存在name为john或erin的元素。

内容的提问来源于stack exchange,提问作者Kamilski81

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:57:28