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)
这还不能完全解决问题,但是出于我的目的,我希望能够将查询作为原始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)
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |