django - 如何在 Django 中使用 UNION + 添加假列
问题描述
我正在尝试在 django ORM 中转换以下查询:
SELECT
MONTH(date) AS Month,
col1,
col2,
col3 col3,
SUM(col4) col4,
SUM(col5) col5
FROM
table1
WHERE
date BETWEEN '2018-07-19' AND '2018-10-17'
GROUP BY 1 , 2 , 3 , 4
UNION ALL
SELECT
MONTH(date) AS Month,
col1,
col2,
0 col3,
SUM(col4) col4,
0 col5
FROM
table2
WHERE
date BETWEEN '2018-07-19' AND '2018-10-17'
GROUP BY 1 , 2 , 3 , 4
在 MySQL Workbench 中运行良好。但在 django 我看到错误 - 我不能这样做:
result2 = table2.objects.\
filter( date__range=( self.data['start_date'], self.data['end_date'] ) ).\
annotate(month=TruncMonth('date')).\
values("month", "col1", "col2", "0").\
annotate( col4=Sum('col4'), col5=Sum(0))
因为“无法将关键字 '0' 解析为字段。”
您对此有什么想法吗?想创建 2 个相同的对象,然后使用union()合并表
我正在使用 django 1.11
解决方案
如果要向查询集添加具有固定值的列,可以使用值表达式:
from django.db.models import Value, IntegerField
result2 = table2.objects.annotate(col5=Value(0, output_field=IntegerField())
推荐阅读
- snakemake - 输入文件中的 Snakemake-通配符无法从输出文件中确定
- mongodb - FilterDefinitionBuidler 忽略与字段的给定值匹配的文档
- python - 可以在 SageMaker(实验室 1.2.*)上使用 dask 仪表板吗?
- django - 在 Caddy 反向代理后面使用 Django 时的 ALLOWED_HOSTS
- java - 二分搜索算法不返回变量
- c# - 如果绑定到 int 和 datetime,“asp-disabled”对 nop-editor 不起作用
- html - 反应:使页脚位于底部
- firebase - 遵循“FlutterFire 概述”教程的未定义名称“Firebase”
- r - sql save 删除现有行并将它们追加
- python - ImportError Pyo