我正在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”
但是我还不了解,我有结果要产生。

因此,而不是执行result_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)

最佳答案

您可以通过RawQuerySet属性从columns获取列名列表。可以通过以下方式从原始查询集中创建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未记录,但稳定。

关于python - 如何从Django RawQuerySet获取元组列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46595690/

10-12 20:55