如何查看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实现DNS正向查询、反向查询的例子
Apr 25 Python
Python中的一些陷阱与技巧小结
Jul 10 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
python 实现语音聊天机器人的示例代码
Dec 02 Python
python 随机森林算法及其优化详解
Jul 11 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
python自定义函数def的应用详解
Jun 03 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
Python实现淘宝秒杀功能的示例代码
Jan 19 Python
anaconda升级sklearn版本的实现方法
Feb 22 Python
Python一些基本的图像操作和处理总结
Jun 23 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 PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
php的扩展写法总结
2019/05/14 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
python爬取微信公众号文章
2018/08/31 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
python接口自动化框架实战
2020/12/23 Python
python自动化办公操作PPT的实现
2021/02/05 Python
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
高级运动鞋:GREATS
2019/07/19 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
应届生如何写自荐信
2014/01/05 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python