正在做:
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.meta
或datas.field
...经过相当长的一段时间寻找和尝试后,我没有得到...
我想获得一些这样的信息:
[{'id': 1, 'OCUPATION_ID': 'Elementary occupations', 'AREA_CODE_ID': 'United Kingdom'}]
在简历中,基本上我不了解原始查询集对象数据结构的结构来访问它,然后为JSON进行序列化。你有什么建议?
提前感谢!
嗯,首先要做的事。在您这样做之后:
datas = list(datas)
数据成为list
对象(不是RawQuerySet
)。可能,你不需要这条线。
这给我们留下的只有:
datas = models.Lfsa_eisn2.objects.raw("... ultraviolent SQL query ...")
现在数据是一个适当的RawQuerySet
.让我们打印它的属性。 Dir
功能(这是普遍规律:不知道如何处理obj
? print 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中不起作用的查询)。