Python 的Django 调试记录sql执行过程

分类:Python |

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

image.png