【发布时间】:2018-03-26 03:03:45
【问题描述】:
我的表格中的数据如下所示:
src_id, dst_id, params
int , int , array
我正在查询数据以从数组中提取一些值 使用以下 Django 查询
dataset = query_set.values_list('src_id', 'dst_id', *[e.field for e in settings])
我需要这样输出数据:
[
[1,2,[a,b,c,d]],
[3,4,[a,c,d,e]],
...
]
但values_list 返回一个元组列表,例如
(1,2,a,b,c,d)(3,4,a,c,d,e)...
所以我一直在执行以下操作来将元组值重新组合成一个数组:
[[d[0], d[1], d[2:]] for d in dataset]
它工作正常,但我有 1M+ 行,而且速度很慢。它也使用了大量的内存。理想情况下,我想在 SQL 中正确格式化数据(通过 Django),并将输出直接推送到 JSON 序列化程序,而不必生成中间数组。
有没有办法优化这段代码?
我研究过使用循环或 lambda,但这并没有太大区别。我看过使用array,但它只需要原始类型,所以数组数组没有太多运气。
如果可能的话,我正在寻找一种方法来查询数据库并以正确的格式直接输出数据:
我看到 Django 可以像进行切片数组查找一样
dataset = query_set.values_list('src_id', 'dst_id', 'data__3_10')
例如获取索引 3 和 10 之间的值,但我需要检索特定索引(例如 1、4、5、6、8、11),而不是切片。
关于如何格式化这样的查询输出的任何提示?
有可能,还是对 Django 来说太深奥了?
我需要raw SQL 吗?
谢谢
【问题讨论】:
-
格式不清楚,数组中的字符串应该真的没有引号,并且没有字符串可以包含逗号或“]”。如果我知道,数组(参数)的单个元素可以用作
.filter(data__3=...)中的查找,但不能在 values_list 中引用。你是怎么做到的? -
这个问题首先不清楚。现在我从您的回答中了解到
[1,2,[a,b,c,d]],根本不是格式化输出,而是嵌套对象的符号表示,其中“a、b、c、d”是任何相同类型的值。一切最终都由 JSON 样式形成,这不是任何示例的一部分,因为问题是一般性的。 (现在修正了上面的错字)
标签: python django django-queryset django-postgresql