如果我比较日期时间,Django的str(queryset.query)返回无效的SQL

时间:2019-08-20 15:42:33

标签: django postgresql django-orm

我有一个用queryset.filter(date__gte=datetime(2011,1,1))准备的Django查询集

如果我再打str(queryset.query),我会在字符串中看到它:

... WHERE "App_table"."date" >= 2011-1-1

但是,这是无效的SQL代码,就像我在Postgresql中运行此错误一样:

... WHERE "App_table"."date" >= 2011-1-1
ERROR:  operator does not exist: date >= integer
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

为什么会发生这种情况?我如何要求Django输出可以使用的适当SQL代码?

2 个答案:

答案 0 :(得分:1)

您可以使用query. sql_with_params()方法。

print(q.query. sql_with_params())

这将打印查询的参数化版本。

答案 1 :(得分:-2)

如果我的模型字段为models.DateField,这就是我过滤日期的方式:

  queryset.filter(date__gte=datetime.date(2011,1,1))

我想如果您将字段date声明为DateTimeField,那么比较就可以了。