在Django中获取原始查询集的结构以序列化它或浏览数据 [英] Getting the structure of a raw queryset in django to serialize it or to browse data

查看:23
本文介绍了在Django中获取原始查询集的结构以序列化它或浏览数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正在做:

datas = models.Lfsa_eisn2.objects.raw("SELECT id, AREA_CODE_ID, OCUPATION_ID, YEAR_ID, GROUP_CONCAT(`cipher` separator ',') as `cipher` from core_lfsa_eisn2 group by  AREA_CODE_ID , OCUPATION_ID,YEAR_ID" )

datas = list(datas)

print datas
...
 OC9 Elementary occupations
 S Other service activities
 2012 UK United Kingdom
 True     
 45.0,4.3,12.8,16.8,16.0,2619.3,:,60.2,57.2,247.4,344.0,208.2,5.5,42.4,455.5,87.1,233.4,24.1,168.6,180.5,362.2,:,43.9>]
...
其中,例如0C9(OCUPATION_ID)是指向基本职业的外键。 我想做一些像datas.ocupation_id这样的事情来获得OC9或初级职业。 您知道如何获取原始对象的元数据结构吗?

应该类似于打印datas.metadatas.fields.我找了很长时间又尝试了一下.

我想获取一些如下信息:

[{'id': 1, 'OCUPATION_ID': 'Elementary occupations', 'AREA_CODE_ID': 'United Kingdom'}]
在简历中,我基本上不理解原始queryset对象数据结构的结构来访问它,然后为JSON进行序列化。您的建议是什么?

提前感谢!

推荐答案

好的,首先要做的事情。在您这样做之后:

datas = list(datas)

数据成为list对象(不是RawQuerySet)。您可能不需要此行。

这就只剩下:

datas = models.Lfsa_eisn2.objects.raw("... ultraviolent SQL query ...")

现在DATAS是正确的RawQuerySet。让我们打印它的属性。Dir对resque的作用(普遍规律:不知道怎么处理objprint dir(obj)什么都知道):

>>> print dir(datas)
[..., 'columns', 'translations', ...]

胡乱猜测:可能datas.columns会给出datas结构。

>>> datas.columns
['id', 'area_code_id', ...]

是的,这正是我们需要的。

现在我们可以执行getattr极端暴力并打印所有属性:

>>> first = datas[0]
>>> for column in datas.columns:
>>>     print getattr(first, column)

还有一件事。您在SQL查询中做了一些极端的事情:您选择了id列,但是GROUP BY列列表中没有id。在波斯格雷斯行不通。应该可以在sqlite中工作,也可以在MySQL中工作(我认为编写不能在MySQL中工作的查询是不可能的)。

这篇关于在Django中获取原始查询集的结构以序列化它或浏览数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆