Python 的Django 调试记录sql执行过程
Python 的Django 调试记录sql执行过程:
缘起: 使用 item_list = BlogItems.objects.all() 时, 总担心查询了整个表数据, 如果你在这时使用 for 循环执行, 的确是查的整表数据, 吃内存性能降低, 但只是猜想:
item_list = BlogItems.objects.all()
# item_list = BlogItems.objects.get_queryset().order_by('item_id')
paginator = Paginator(item_list,10,2); # 每页10条,少于2条,则显示到上一页
page = request.GET.get('page')
try:
item_list = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
item_list = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
item_list = paginator.page(paginator.num_pages)
context = {
'item_list': item_list
}
如何证明, 日志是个不错的解决方法, 开启日志:
LOGGING = {
'disable_existing_loggers': False,
'version': 1,
'handlers': {
'console': {
# logging handler that outputs log messages to terminal
'class': 'logging.StreamHandler',
'level': 'DEBUG', # message level to be written to console
},
},
'loggers': {
'django.db.backends': {
# this sets root level logger to log debug and higher level
# logs to console. All other loggers inherit settings from
# root level logger.
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False, # this tells logger to send logging message
# to its parent (will send if set to True)
},
'django.db': {
# django also has database level logging
},
},
}
sql 打印如下, 不必担心, 分页是有limit 的 ^_^
