如何查看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求解平方根的方法
Mar 11 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
使用Python中的tkinter模块作图的方法
Feb 07 Python
python 垃圾收集机制的实例详解
Aug 20 Python
快速入门python学习笔记
Dec 06 Python
Python基于SMTP协议实现发送邮件功能详解
Aug 14 Python
python匿名函数用法实例分析
Aug 03 Python
Python decorator拦截器代码实例解析
Apr 04 Python
python实现手势识别的示例(入门)
Apr 15 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 30 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静态新闻列表自动生成代码
2007/06/14 PHP
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
js实现精美的银灰色竖排折叠菜单
2015/05/16 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
用python实现批量重命名文件的代码
2012/05/25 Python
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
pycharm远程调试openstack的图文教程
2017/11/21 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
详解python中*号的用法
2019/10/21 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
职工趣味运动会方案
2014/02/10 职场文书
付款委托书范本
2014/04/04 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
残疾人小组计划书
2014/04/27 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
军训新闻稿范文
2015/07/17 职场文书
物业公司管理制度
2015/08/05 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers