如何查看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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
Python操作MySQL简单实现方法
Jan 26 Python
Python图像灰度变换及图像数组操作
Jan 27 Python
Java及python正则表达式详解
Dec 27 Python
python创建文件时去掉非法字符的方法
Oct 31 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
python使用opencv对图像mask处理的方法
Jul 05 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 Python
pytorch锁死在dataloader(训练时卡死)
May 28 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
php中的三元运算符使用说明
2011/07/03 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
Vue中引入样式文件的方法
2017/08/18 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
html5 学习简单的拾色器
2010/09/03 HTML / CSS
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
运动会广播稿100字
2014/01/11 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
小学三年级作文之写景
2019/11/05 职场文书
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏