Django获取QuerySet的可执行原始sql

epo*_*och 5 python sql django orm

我知道您可以使用获取给定QuerySet的SQL

print query.query
Run Code Online (Sandbox Code Playgroud)

但正如我们从上一个问题(在QuerySet.query中潜在的Django Bug?)中所知,返回的SQL没有被正确引用.见http://code.djangoproject.com/browser/django/trunk/django/db/models/sql/query.py

有没有什么方法可以获得给定QuerySet的原始可执行SQL(引用)而不实际执行它?

Mik*_*iak 9

Django从不创建原始sql,所以没有.为防止SQL注入,django在最后一步将参数分别传递给数据库驱动程序.获取实际SQL的最佳方法是查看查询日志,在执行查询之前无法执行此操作.

  • +1.@epoch:正确,答案是否定的.如果您想查询传递给后端的查询,可以使用以下代码段.`来自django.db import DEFAULT_DB_ALIAS; queryset.query.get_compiler(DEFAULT_DB_ALIAS).as_sql()` (2认同)