此问题与log all sql queries 不同
我尝试从上面的答案中记录配置它们不能正常工作,所以请继续阅读。
我想做的是让Django(1.11.x)调试服务器以这种方式记录SQL查询,我可以将它们重定向到* .sql文件并立即执行。
为此,我需要一个SQL语句,其中所有变量都已被替换,所以我不想要这样:
WHERE some_column in (:arg1, :arg2, ...)
但我希望这样:
WHERE some_column in ('actual_value_1', 'actual_value2', ...)
你能帮我弄明白怎么做吗?
请注意,我不希望在浏览器中打印SQL查询(在某些调试应用程序中,如django_debug_toolbar
),但打印到控制台。
请注意,我不想在控制台中输入Django QuerySet查询 - 我想在浏览器中输入URL,因此向Django调试服务器发出实际的HTTP请求并看到它打印SQL查询以这种方式,我可以稍后使用SQL Plus或任何其他控制台工具执行它。
答案 0 :(得分:1)
我认为我刚制作的工具对你来说非常适合。
https://pypi.python.org/pypi/django-print-sql
https://github.com/rabbit-aaron/django-print-sql
像这样安装:
pub struct Message {
term: Term,
kind: MessageKind,
}
pub enum MessageKind {
AppendRequest,
AppendResponse,
VoteRequest,
VoteResponse,
}
在视图功能中使用如下:
pip install --upgrade django-print-sql
答案 1 :(得分:0)
这有点像黑客,因为我们必须删除所用时间和args的默认django.db.backends
日志消息。进行这些更改后,您应该拥有一个纯SQL文件,您可以根据需要自由运行...
首先,您要设置日志记录设置以引用我们的新日志处理程序
设定:
LOGGING = {
'version': 1,
'handlers': {
'sql': {
'level': 'DEBUG',
'class': 'my_project.loggers.DjangoSQLFileHandler',
'filename': '/path/to/sql.log'
},
},
'loggers': {
'django.db.backends': {
'handlers': ['sql'],
'level': 'DEBUG'
}
}
}
然后,您需要定义新的处理程序,并从邮件中删除不需要的文本。
my_project.loggers.py
:
from logging import FileHandler
class DjangoSQLFileHandler(FileHandler):
def getMessage(self):
msg = super(DjangoSQLFileHandler, self).getMessage()
return record.msg.split(') ', 1)[1].split(';', 1)[0] + ';'