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 的 ^_^