Django调试技巧:通过日志配置与自定义函数打印SQL语句

Noah
Noah
发布时间:2026-10-13| 5人浏览过
原创

本文详细介绍在Django项目中调试时打印SQL语句的两种方法。首先讲解如何在settings.py中配置LOGGING字典,将django.db.backends日志级别设为DEBUG并输出到控制台。其次提供一段自定义Python函数代码,通过判断查询集类型直接获取SQL字符串,并格式化高亮打印最近执行的SQL语句,帮助开发者快速定位数据库问题。

本文主要分享在调试Django应用时,如何有效打印SQL语句的日志代码实例。文中提供了详细的示例代码,对开发者在学习或实际工作中排查数据库相关问题具有较高的参考价值。

通过LOGGING配置打印SQL

第一种方法是通过修改项目配置文件来实现。具体操作是在项目的settings.py文件中添加相应的日志配置代码,以开启SQL语句的记录功能。


LOGGING = {
  'version': 1,
  'disable_existing_loggers': False,
  'handlers': {
    'console':{
      'level':'DEBUG',
      'class':'logging.StreamHandler',
    },
  },
  'loggers': {
    'django.db.backends': {
      'handlers': ['console'],
      'propagate': True,
      'level':'DEBUG',
    },
  }
}

自定义函数获取并打印SQL

第二种方法是编写一个独立的辅助函数,用于在代码执行过程中动态获取并打印SQL语句。这种方法更加灵活,适用于需要即时查看特定查询结果的场景。


from django.db import connection
from django.db.models.query import QuerySet
def getSql(res):
  if type(res) == QuerySet:
    sql = str(res.query)
  else:
    queries = connection.queries
    sql = str(queries[-1].get('sql'), 'utf-8')
  print('\033[1;34m' + '=' * len(sql))
  print(sql)
  print('=' * len(sql) + '\033[0m')

以上即为本文介绍的全部内容,希望这些方法能对各位的学习和工作有所帮助。如果有任何疑问或建议,欢迎继续交流探讨。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。