【问题标题】:Left joint existing Django QuerySet左联合现有的 Django QuerySet
【发布时间】:2018-02-12 14:02:24
【问题描述】:

我正在尝试在 Django 中加入两个查询。有没有办法做到这一点?我试图在python 中合并结果,但我意识到我必须在模板中多次编辑结果,这样我才能更舒服地使用左连接我的查询。如果我知道这个方法,那么在我未来的工作中也会非常有用。提前感谢您的帮助。

我的第一个查询 (1) 和结果是:

查询(1)

 query:1=Table.objects.all()
    .filter(time_stamp__range=(before_now_week, now)).
    .filter(field__gt=0.01)
    .filter(field__lte=0.03)
    .annotate(day=TruncDay('time_stamp'))
    .values('day')
    .annotate(time=Count('time_stamp'))
    .annotate(field_count_1=Count('field'))
    .values('day','field_count_1')
    .order_by('-day')

结果(1):

          day              field_count_1
-------------------------|-----------
2018-01-17 00:00:00+01:00|    49
2018-01-16 00:00:00+01:00|    139
2018-01-15 00:00:00+01:00|    144
2018-01-14 00:00:00+01:00|    142
2018-01-13 00:00:00+01:00|    141
2018-01-12 00:00:00+01:00|    144
2018-01-11 00:00:00+01:00|    145
2018-01-10 00:00:00+01:00|    95

我的第一个查询 (2) 和结果是:

查询(2)

query=Table.objects.all()
.filter(time_stamp__range=(before_now_week, now)).
.filter(field__gte=0.03)
.annotate(day=TruncDay('time_stamp'))
.values('day')
.annotate(time=Count('time_stamp'))
.annotate(field_count_2=Count('field'))
.values('day','field_count_2')
.order_by('-day')

结果(2)

              day            field_count_2
   -------------------------|-----------
   2018-01-17 00:00:00+01:00|     2
   2018-01-16 00:00:00+01:00|     6
   2018-01-14 00:00:00+01:00|     2
   2018-01-13 00:00:00+01:00|     4

期望的结果:

       day                field_count_1  field_count_2
-------------------------|---------------|--------
2018-01-17 00:00:00+01:00|       49      |     2
2018-01-16 00:00:00+01:00|       139     |     6
2018-01-15 00:00:00+01:00|       144     |     0
2018-01-14 00:00:00+01:00|       142     |     2
2018-01-13 00:00:00+01:00|       141     |     4
2018-01-12 00:00:00+01:00|       144     |     0
2018-01-11 00:00:00+01:00|       145     |     0
2018-01-10 00:00:00+01:00|       95      |     0 

【问题讨论】:

  • 你需要做的计数来自另一个模型?它叫什么名字?

标签: django left-join django-queryset


【解决方案1】:

已解决:

我尝试使用熊猫。我的方法的步骤是:

1、将对象转换为DataFrame

  • pd_query_1 = pd.DataFrame.from_records(query_1)

  • pd_query_2 = pd.DataFrame.from_records(query_2)

2、左连接两个查询

  • result = (pd.merge(pd_query_1, pd_query_2, how='left', on=['day', 'day'])).fillna(0)

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2017-10-08
    • 1970-01-01
    • 2020-10-31
    • 2021-01-18
    相关资源
    最近更新 更多