[英]How to get a list of tuples from a Django RawQuerySet?
我正在 django 中使用原始 SQL 进行复杂查询以解决一些注释问题。 实际查询有许多已转换为子查询的左连接,以便绕过 Django 中的一个主要错误。 https://code.djangoproject.com/ticket/10060
给定的
fields = ['shift__adminFee',
'shift__rosterSlot__adminFee',
'shift__taxi__rosterGroup__adminFee',
'shift__driver__adminFee']
query = `''select table.id, "table_shift"."adminFee"
, "table_rosterslot"."adminFee"
, "table_rostergroup"."adminFee"
, "table_driver"."adminFee" from table
left join ( select table_id, sum(amount) amount_sum from related_table group by table_id ) related_table
on table.id = related_table.table_id
...
( more inner joins and tables to support the above fields )
'''
rawQuerySet = Table.objects.raw(q)
它返回一个 RawQuerySet。
RawQuerySet 运行良好......它填充相关模型并提供正确的注释结果。
但是 RawQuerySet 不支持返回元组列表。
我查看了项目中本地的源文件 'env/lib/python2.7/site-packages/django/db/models/query.py' 但我还不明白它,我有一个结果生产。
所以我没有做 results_as_list_of_tuples = query.values_list(*fields) 我做了类似的事情
results_as_list_of_tuples = []
for result in query:
shift = result.shift
eventSchedule = shift.eventSchedule
rosterSlot = shift.rosterSlot
taxi = shift.taxi
rosterGroup = taxi.rosterGroup
data = []
...
# the following is one line. I broke it up because it didn't format correctly.
data.extend([
shift.adminFee
,rosterSlot.adminFee
,rosterGroup.adminFee
,driver.adminFee]
)
...
results_as_list_of_tuples.append(tuple(data))
如何从 Django RawQuerySet 中获取元组列表,例如 results_as_list_of_tuples = values_list(raw_query_set,*fields)
您可以通过columns
属性从RawQuerySet
获取列名列表。 可以通过以下方式从原始查询集创建values_list
迭代器:
def raw_queryset_as_values_list(raw_qs):
columns = raw_qs.columns
for row in raw_qs:
yield tuple(getattr(row, col) for col in columns)
属性columns
没有记录,但很稳定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.