data = self.get_queryset()\
.annotate(total=Func(Sum('money_field'), Value('CHAR'), function="CONVERT"))\
.filter(date__lt=end, date__gte=start)
如果我执行data.query
- 它工作正常,但data.all()
引发MySQL错误。
这个魔法的原因是Django Func(),当我尝试传递常量参数(没有括号) - 这是一种方法:使用django Value()。
当我通过data.query获取查询时它工作正常,但是当执行时 - mysql添加其他引号,
工作战士是:
data = self.get_queryset()\
.annotate(total=Func(Sum('money_field'), Value('CHAR'), function="CONVERT"))\
.filter(date__lt=end, date__gte=start)
cursor = connection.cursor()
cursor.execute(str(data.query).replace('%', '%%'), [])
data_list = cursor.fetchall()
任何人都可以说WTF?
答案 0 :(得分:0)
UPD 2: 查询集的打印查询如下:
SELECT `blankapp_modela`.`id`, `blankapp_modela`.`decimal_field`,
CONVERT(SUM(`blankapp_modela`.`decimal_field`), CHAR) AS `total` FROM
`blankapp_modela` GROUP BY `blankapp_modela`.`id` ORDER BY NULL
深入研究mysql游标,我发现了下一步:
SELECT `blankapp_modela`.`id`, `blankapp_modela`.`decimal_field`,
CONVERT(SUM(`blankapp_modela`.`decimal_field`), 'CHAR') AS `total` FROM
`blankapp_modela` GROUP BY `blankapp_modela`.`id` ORDER BY NULL LIMIT 21
CHAR
包含在引号中,所以它不对。
暂时不知道正确的解决方案。
它不是django问题,而是MySQLdb的行为。