【发布时间】:2018-11-09 10:07:14
【问题描述】:
我有一个类似的模型
from jsonfield import JSONField
class data(model):
content=JSONField()
.......
我的模型数据示例数据库条目将是
data1 : id =1, content = {"email":"abc@gmail.com"}
data2 : id =2, content = {"email":"cdf@gmail.com"}
data3 : id =3, content ={"email":"abc@gmail.com"}
data4 : id = 4, content ={"email":"sfg@gmail.com"}
data5 : id = 5, content ={"email":"abc@gmail.com"}
data6 : id = 6, content ={"email":"sfg@gmail.com"}
我需要找到非唯一的“电子邮件”值和 id 列表,例如
"abc@gmail.com" : [1,3,5]
"sfg@gmail.com : [4,6]
我正在使用 django 1.11 和 python 2.7 和 postgres9.3
我的查询是
lists = data.objects.filter(....).extra(select={'email':"content->>'email'"}).values('email','id')
我得到的结果是
{"email":"abc@gmail.com","id":1}
{"email":"cdf@gmail.com","id":2}
{"email":"abc@gmail.com","id":3}
{"email":"sfg@gmail.com","id":4}
{"email":"abc@gmail.com","id":5}
{"email":"sfg@gmail.com","id":6}
其中包括唯一值和非唯一值,这不是必需的。
查询 1: 是否有可能使用 Django 仅从 JSON 字段中查询唯一值。
尝试distinct(),但在值部分中作为“id”和“email”都失败了
无论如何处理它作为
for d in lists:
if d['email'] not in temp:
temp[d['email']]=[d['id']]
else:
temp[d['email']].append(d['id'])
得到所有值的结果,包括唯一和非唯一,如下所示
"abc@gmail.com" : [1,3,5]
"sfg@gmail.com" : [4,6]
"cdf@gmail.com" : [2] ## not desired
Query2:有没有什么方法可以更有效地处理这些数据?
【问题讨论】:
标签: python django postgresql