如何查看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 Trie树实现字典排序
Mar 28 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
Python基础之文件读取的讲解
Feb 16 Python
python实现爬山算法的思路详解
Apr 09 Python
YUV转为jpg图像的实现
Dec 09 Python
Python list运算操作代码实例解析
Jan 20 Python
浅谈Python中的继承
Jun 19 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
python ssh 执行shell命令的示例
Sep 29 Python
浅谈matplotlib默认字体设置探索
Feb 03 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模板页面中分页代码的解析
2009/02/06 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
JQuery工具函数汇总
2015/06/15 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
JavaScript+html5 canvas制作色彩斑斓的正方形效果
2016/01/27 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
[00:14]护身甲盾
2019/03/06 DOTA
python 异常处理总结
2016/10/18 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
实践Vim配置python开发环境
2018/07/02 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
基于python实现把图片转换成素描
2019/11/13 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
函授本科毕业自我鉴定
2013/10/09 职场文书
教师考核评语
2014/04/28 职场文书
师德师风自查总结
2014/10/14 职场文书
个人作风建设自查报告
2014/10/22 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
超市食品安全承诺书
2015/04/29 职场文书
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python
python使用shell脚本创建kafka连接器
2022/04/29 Python
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android