Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django';如果比较日期时间,则s str(queryset.query)返回无效的SQL_Django_Postgresql_Django Orm - Fatal编程技术网

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

Django';如果比较日期时间,则s str(queryset.query)返回无效的SQL,django,postgresql,django-orm,Django,Postgresql,Django Orm,我有一个Django查询集,我准备使用queryset.filter(date\uu gte=datetime(2011,1,1)) 如果我随后调用str(queryset.query)我会在字符串中看到: ... WHERE "App_table"."date" >= 2011-1-1 但是,这是无效的SQL代码,如果在Postgresql中运行此代码,则会出现以下错误: ... WHERE "App_table"."date" >= 2011-1-1 ERROR: opera

我有一个Django查询集,我准备使用
queryset.filter(date\uu gte=datetime(2011,1,1))

如果我随后调用
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代码?

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

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

我想,如果您已将字段
date
声明为
DateTimeField
,则比较会起作用。

如果我的模型字段是
models,我就是这样过滤日期的。DateField

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

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

您可以使用
查询。sql_with_params()
方法

print(q.query. sql_with_params())

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

您可以使用
查询。sql_with_params()
方法

print(q.query. sql_with_params())

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

获取
str(queryset.query)
,并将其复制粘贴到数据库中。无论列是否存在,它都将不起作用。在表达式“WHERE”App_table中,“date”>=2011-1-1“Postgres将操作数2011-1-1插入为“整数”,在本例中计算为整数2009。因此,语句实际上变成了“date>=integer”,这是一个无效的比较。如果你想表达一个日期,你必须告诉Postgres这就是你想要的。在“App_table.”date“>=”2011-1-1'::date.Take
str(queryset.query)
,然后将其复制粘贴到数据库中。无论列是否存在,它都将不起作用。在表达式“WHERE”App_table中,“date”>=2011-1-1“Postgres将操作数2011-1-1插入为“整数”,在本例中计算为整数2009。因此,语句实际上变成了“date>=integer”,这是一个无效的比较。如果你想表达一个日期,你必须告诉Postgres这就是你想要的。在“App_table.”date“>=”2011-1-1'::date.这将返回一个元组,其中
[0]
是查询,其中
%s
代替参数,[1]是参数。如果我执行
queryTuple[0]%queryTuple[1]
操作,它将提供与
str(q.query)
相同的无效字符串。因此,我想我应该使用带参数的
sql\u
,手动搜索[1]中的日期时间,并将其转换为带引号的字符串。Django没有办法做到这一点?这里有一个可能的答案来回答我的评论:是的,重点是这现在是db适配器而不是Django的责任。这将返回一个元组,其中
[0]
是查询,其中
%s
代替了参数,[1]是参数。如果我执行
queryTuple[0]%queryTuple[1]
操作,它将提供与
str(q.query)
相同的无效字符串。因此,我想我应该使用带参数的
sql\u
,手动搜索[1]中的日期时间,并将其转换为带引号的字符串。Django没有办法做到这一点?这里有一个可能的答案来回答我的评论:是的,重点是这现在是db适配器的责任,而不是Django的责任。