如何查看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 相关文章推荐
Eclipse + Python 的安装与配置流程
Mar 05 Python
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
python+matplotlib绘制旋转椭圆实例代码
Jan 12 Python
django的登录注册系统的示例代码
May 14 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
Django框架搭建的简易图书信息网站案例
May 25 Python
python psutil模块使用方法解析
Aug 01 Python
Flask框架学习笔记之模板操作实例详解
Aug 15 Python
Django Model中字段(field)的各种选项说明
May 19 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
使用Django的JsonResponse返回数据的实现
Jan 15 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 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压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
UserData用法总结 lanyu出品
2010/07/01 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
js使用心得分享
2015/01/13 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
AspNet中使用JQuery boxy插件的确认框
2015/05/20 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
Python实用日期时间处理方法汇总
2015/05/09 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
python之pandas用法大全
2018/03/13 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
python实现图像拼接功能
2020/03/23 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
社团2014年植树节活动总结
2014/03/11 职场文书
结对共建协议书
2014/08/20 职场文书
安全生产标语口号
2015/12/26 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
Mysql文件存储图文详解
2021/06/01 MySQL