如何查看Django ORM执行的SQL语句的实现


Posted in Python onApril 20, 2020

Django ORM对数据库操作的封装相当完善,日常大部分数据库操作都可以通过ORM实现。但django将查询过程隐藏在了后台,这在开发时可能会略显晦涩,并且使用方式不当还会造成开销过大。

那么如何查看django何时执行了什么sql语句呢?答案是使用Logging。

先直接上方法,在settings.py中加入LOGGING选项,调整logging等级为DEBUG即可:

LOGGING = {
  'version': 1,
  'disable_existing_loggers': False,
  'formatters': {
    'simple': {
      'format': '[%(asctime)s] %(message)s'
    },
  },
  'handlers': {
    'console': {
      'level': 'DEBUG',
      'class': 'logging.StreamHandler',
      'formatter': 'simple'
    },
  },
  'loggers': {
    'django': {
      'handlers': ['console'],
      'level': 'DEBUG',
    },
  },
}

然后启动runserver,浏览需要访问数据库的页面,在shell中即可看见相关日志,如下:

[2018-04-21 21:09:14,676] (0.002) SELECT `blog_article`.`id`, `blog_article`.`title`, `blog_article`.`cover`, `blog_article`.`content`, `blog_article`.`pub_date`, `blog_article`.`category_id`, `blog_article`.`views`, `blog_category`.`id`, `blog_category`.`name` FROM `blog_article` INNER JOIN `blog_category` ON (`blog_article`.`category_id` = `blog_category`.`id`) WHERE `blog_article`.`pub_date` < '2018-04-21 13:09:14.601856' ORDER BY `blog_article`.`pub_date` DESC LIMIT 10; args=('2018-04-21 13:09:14.601856',)
[2018-04-21 21:09:14,678] (0.000) SELECT (`blog_article_topics`.`article_id`) AS `_prefetch_related_val_article_id`, `blog_topic`.`id`, `blog_topic`.`name`, `blog_topic`.`number` FROM `blog_topic` INNER JOIN `blog_article_topics` ON (`blog_topic`.`id` = `blog_article_topics`.`topic_id`) WHERE `blog_article_topics`.`article_id` IN (3, 4, 5, 6, 7, 8, 9, 10, 11, 12) ORDER BY `blog_topic`.`number` ASC; args=(3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
[2018-04-21 21:09:14,708] "GET / HTTP/1.1" 200 22325

上面打印出的日志是我的博客首页获取前十篇文章时所执行的部分SQL语句,其对应的QuerySet为

Article.objects.filter(pub_date__lt=timezone.now())[:10] \
.defer('author', 'category__number') \
.select_related('category') \
.prefetch_related('topics')

通过Logging不仅可以查看SQL语句,还可以由此知道django何时执行了SQL。在某些情况下我们可以通过这种方式判断,后台是否重复执行了SQL语句,便于指导数据库访问优化。

Django使用Python的内建的logging模块执行系统日志记录。

到此这篇关于如何查看Django ORM执行的SQL语句的实现的文章就介绍到这了,更多相关Django ORM执行SQL语句内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python常用正则表达式符号浅析
Aug 13 Python
Python中endswith()函数的基本使用
Apr 07 Python
Python易忽视知识点小结
May 25 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
Python 编程速成(推荐)
Apr 15 Python
基于Python解密仿射密码
Oct 21 Python
如何写python的配置文件
Jun 07 Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 Python
OpenCV+Python3.5 简易手势识别的实现
Dec 21 Python
使用IPython或Spyder将省略号表示的内容完整输出
Apr 20 #Python
解决Python spyder显示不全df列和行的问题
Apr 20 #Python
Python爬虫实现vip电影下载的示例代码
Apr 20 #Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
Apr 19 #Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 #Python
TensorFlow打印输出tensor的值
Apr 19 #Python
numpy库reshape用法详解
Apr 19 #Python
You might like
php array_walk() 数组函数
2011/07/12 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
jquery 事件对象属性小结
2010/04/27 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
详解参数传递四种形式
2015/07/21 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
vue实现文件上传功能
2018/08/13 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
浅谈Python中的闭包
2015/07/08 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
PyQt5实现简易计算器
2020/05/30 Python
python实现tail -f 功能
2020/01/17 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
我的求职计划书
2014/01/10 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
触电现场处置方案
2014/05/14 职场文书
国际会计专业求职信
2014/08/04 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书