小编use*_*068的帖子

在 django 查询集中横向加入(为了使用 jsonb_to_recordset postgresql 函数)

我有一个模型“myModel”将一些数据保存在一个名为“json”的(postgresql)jsonField中,json数据的典型结构是:{key:[{"a":1, "b":2}, {" a":3, "b":4}]}。

我想根据“a”或“b”的值过滤 myModel 查询集。我可能还想聚合“a”或“b”

因此,“取消嵌套” (json -> key) 数组将非常受欢迎,但我无法弄清楚如何使用 django api 执行此操作。

我尝试通过以下 SQL 查询在 postgresql 中直接执行“取消嵌套”。

SELECT * 
FROM "myModel"
join lateral jsonb_to_recordset("myModel"."json" -> 'key') as r("a" int, "b" int) on true
LIMIT 5
Run Code Online (Sandbox Code Playgroud)

我们甚至可以使用横向连接的快捷表示法使其更加紧凑

SELECT * 
FROM "myModel", jsonb_to_recordset("myModel"."json" -> 'key') as r("a" int, "b" int)
LIMIT 5
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用 django API 做一些等效的事情。我已经尝试了一些关于 annotate 和 RawSQL 的事情,但他们似乎没有对“FROM”子句起作用。这是我应该实际添加 'jsonb_to_recordset' 语句的地方。我可能可以使用原始函数来放置我的原始 SQL,但这意味着我无法使用 django API 在连接的 quesryset 上“过滤”或“聚合”......我必须在 rawSQL 中做所有事情这对我必须做的事情来说不是很方便。

另一种方法是使用允许在 sql FROM 子句中添加附加表的查询集“额外”功能。不幸的是,如果我这样做:

qs = myModel.objects.all()
qs …
Run Code Online (Sandbox Code Playgroud)

python django postgresql

6
推荐指数
1
解决办法
805
查看次数

标签 统计

django ×1

postgresql ×1

python ×1