django sqlite strftime&参数化SQL查询

时间:2016-10-06 14:27:30

标签: python django sqlite

我有一个基于 django 的Web应用程序,其中包括对时间历史的分析。我目前正在使用 sqlite 作为数据库后端。

我通常以10分钟为一组对数据进行分组,因此我会聚合得到最终结果。

要获得十分钟的数据块,我有以下查询集

blocks = qs.extra({'ten_min' : u"strftime('%Y%m%d%H0', date) + strftime('%M', date)/10"})\
        .values('ten_min').annotate(mop.Sum('event_val1'),mop.Sum('event_val2')).all()

我也可能在给定的时间间隔内限制,例如:

qs.get(date__gte = last_midnight)

虽然两个查询在分开时完美运行,但它们不会链接

django生成的最终参数化SQL查询字符串无法呈现,因为sqlite的%中的strtftime被误解为在呈现字符串时要替换的元素。

为了清楚起见,让我报告整个查询:

params = (u"'2016-10-06 00:00:44.054382'",)
sql =   u'SELECT (strftime(\'%Y%m%d%H0\', date) + strftime(\'%M\', date)/10) AS "ten_min", SUM("event_logger_event"."event_val1") AS "event_val1__sum", SUM("event_logger_event"."event_val2") AS "event_val2__sum" FROM "event_logger_event" WHERE "event_logger_event"."date" >= %s GROUP BY (strftime(\'%Y%m%d%H0\', date) + strftime(\'%M\', date)/10)'

查询呈现为sql % params,这会产生错误。

事实上,系统会尝试替换%Y%m%d等元素而不是正确的

... "date" >= %s ...

有关如何处理此问题的任何建议吗?

0 个答案:

没有答案