使用优秀的Django-Devserver我在我的代码中找到各种有趣和意外的SQL调用.我想找到调用的来源,所以我正在寻找一种方法来获取日志或打印出在Python shell中由Django ORM生成的所有SQL调用.也就是说,当我通过Python shell进行Django ORM调用时,我希望看到打印出来或记录的结果SQL.
我注意到几个解决方案将日志信息添加到html页面.是否有一种简单的方法转储到命令行?
jac*_*ian 187
如果你正在使用Django 1.3:
import logging
l = logging.getLogger('django.db.backends')
l.setLevel(logging.DEBUG)
l.addHandler(logging.StreamHandler())
Run Code Online (Sandbox Code Playgroud)
bab*_*unk 29
我试图在生产服务器上的shell中使用" Django:显示/记录来自python shell的ORM sql调用 ",但它无法正常工作.最终有人指出它只会执行此调试日志记录DEBUG = True.但你可以解决这个问题:
import logging
from django.db import connection
connection.force_debug_cursor = True # Change to use_debug_cursor in django < 1.8
l = logging.getLogger('django.db.backends')
l.setLevel(logging.DEBUG)
l.addHandler(logging.StreamHandler())
Run Code Online (Sandbox Code Playgroud)
我将它留在这里,以便我可以在以后找到它,并希望它可以节省其他人同样的挖掘工作.
Ven*_*tra 23
使用django扩展.
pip install django-extensions
./manage.py shell_plus --print-sql
Run Code Online (Sandbox Code Playgroud)
对于生产环境,由于调试设置,它可能无法工作.
Zac*_*ach 11
如果您在shell中或任何地方,可以使用queryset方法
query.as_sql()
Run Code Online (Sandbox Code Playgroud)
打印SQL命令.
即:
MyModel.objects.all().query.as_sql()
Run Code Online (Sandbox Code Playgroud)
qs = YourModel.objects.all()
qs.query.get_compiler('default').as_sql()
Run Code Online (Sandbox Code Playgroud)
如果您真的想要查看/记录所有SQL查询,那么您将需要尝试使用Django 1.3(目前处于alpha版本,但很快就会投入生产),它可以为许多组件(包括数据库后端)启用Python记录器.
当然,如果您坚持使用稳定版本的Django,django/db/models/sql/compiler.py通过将其添加到导入列表的底部,可以相对轻松地获得相同的效果:
import logging
_querylogger = logging.getLogger( 'sql.compiler' )
Run Code Online (Sandbox Code Playgroud)
找到SQLCompiler::execute_sql()方法并改变:
cursor = self.connection.cursor()
cursor.execute( sql, params )
Run Code Online (Sandbox Code Playgroud)
对此:
cursor = self.connection.cursor()
_querylogger.info( "%s <= %s", sql, params )
cursor.execute( sql, params )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28466 次 |
| 最近记录: |