如何从Django QuerySet获取带有正确引用的过滤器参数的SQL?

ser*_*erg 4 django

MyModel.objects.filter(name="my name", date__lte=datetime.now()).query
Run Code Online (Sandbox Code Playgroud)

输出:

SELECT "mymodel"."id", "mymodel"."name", "mymodel"."date" 
FROM "mymodel" 
WHERE ("mymodel"."name" = my name AND "mymodel"."date" <= 2016-02-24 20:24:00.456974+00:00)
Run Code Online (Sandbox Code Playgroud)

这不是有效的SQL(未引用过滤器参数)。

我如何获取将要执行的确切SQL,即:

SELECT "mymodel"."id", "mymodel"."name", "mymodel"."date" 
FROM "mymodel" 
WHERE ("mymodel"."name" = 'my name' AND "mymodel"."date" <= '2016-02-24 20:24:00.456974+00:00'::timestamptz)
Run Code Online (Sandbox Code Playgroud)

ser*_*erg 6

这还不能完全解决问题,但是出于我的目的,我希望能够将查询作为原始sql重新运行。我能够使用以下命令获取sql和params:

queryset = MyModel.objects.filter(name="my name", date__lte=datetime.now())
sql, sql_params = queryset.query.get_compiler(using=queryset.db).as_sql()
Run Code Online (Sandbox Code Playgroud)

然后,我可以使用这些值将原始查询重新运行:

MyModel.objects.raw(sql, sql_params)
Run Code Online (Sandbox Code Playgroud)