如何查看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 相关文章推荐
使用graphics.py实现2048小游戏
Mar 10 Python
在Python的Django框架中编写编译函数
Jul 20 Python
Python中元组,列表,字典的区别
May 21 Python
python定向爬取淘宝商品价格
Feb 27 Python
python使用Flask操作mysql实现登录功能
May 14 Python
python生成九宫格图片
Nov 19 Python
Python线程池模块ThreadPoolExecutor用法分析
Dec 28 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
python3.7环境下安装Anaconda的教程图解
Sep 10 Python
python 8种必备的gui库
Aug 27 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
python GUI计算器的实现
Oct 09 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实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
php查询操作实现投票功能
2016/05/09 PHP
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
Python简单计算文件夹大小的方法
2015/07/14 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
Python3.6简单反射操作示例
2018/06/14 Python
Python3标准库总结
2019/02/19 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
python 实现aes256加密
2020/11/27 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
教育合作协议范本
2014/10/17 职场文书
先进党支部事迹材料
2014/12/24 职场文书
安全先进个人材料
2014/12/29 职场文书
安全教育第一课观后感
2015/06/17 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript