【问题标题】:How to get simple pivot table using django orm?如何使用 django orm 获取简单的数据透视表?
【发布时间】:2020-05-09 22:00:44
【问题描述】:

具有 3 个数据列的简单模型。

输入:

id  ts  val var
1   1   1   10
2   2   2   20
3   2   3   30
4   1   4   40
5   1   5   50
6   2   6   60

输出:

ts  val     var
1   [1,4,5] [10,40,50]
2   [2,3,6] [20,30,60]
AND
ts  val_var
1   [1,10]  [4,40]  [5,50]
2   [2,20]  [3,30]  [6,60]

应该使用什么:annotate() aggregate() group_by()?

甚至更简单的数据透视表:

ts  val
1   [1,4,5]
2   [2,3,6]

【问题讨论】:

    标签: django orm django-queryset django-orm


    【解决方案1】:

    我曾想过遍历一个适当排序的查询集。如果查询集很大,则使用yield 创建生成器是有效的,而不是创建一个巨大的列表然后对其进行处理。

    NB 未经测试。

    def foo1():    
    
        qs = Whatever.objects.all().order_by( 'ts', 'val')
        vals, vars = [],[]
        for obj in qs:
    
             if vals and obj.ts != ts:
                  yield ts, vals, vars
                  vals, vars = [], []
    
             ts = obj.ts
             vals.append( obj.val)
             vars.append( obj.var)
    
        yield ts, vals, vars # don't forget the last one
    

    用法:

    for ts, val, var in foo1():
         print ( ts, val, var)   
    

    对于第二个,您只需在结果上使用 zip:

         print ( ts, *[ x for x in zip( val, var) ]) 
    

    【讨论】:

    • 我想使用 django orm 来获取表。
    猜你喜欢
    • 2022-01-05
    • 2020-06-14
    • 2018-09-25
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2021-02-26
    • 2019-10-11
    • 2017-07-25
    相关资源
    最近更新 更多