如何查看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去除所有html标签的方法
May 05 Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 Python
pandas or sql计算前后两行数据间的增值方法
Apr 20 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
python实现最长公共子序列
May 22 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
Python Pandas数据中对时间的操作
Jul 30 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
基于python实现微信好友数据分析(简单)
Feb 16 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
基于Python实现股票收益率分析
Apr 02 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自定义扩展名获取函数示例
2016/12/12 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
PHP _construct()函数讲解
2019/02/03 PHP
ajax与302响应代码测试
2013/10/23 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
js模块加载方式浅析
2017/08/12 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
r.js来合并压缩css文件的示例
2018/04/26 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
彻底搞懂Python字符编码
2018/01/23 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
中文系学生自荐信范文
2013/11/13 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
详解运行Python的神器Jupyter Notebook
2021/06/03 Python
在redisCluster中模糊获取key方式
2021/07/09 Redis
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
一文简单了解MySQL前缀索引
2022/04/03 MySQL
vue的项目如何打包上线
2022/04/13 Vue.js
python开发制作好看的时钟效果
2022/05/02 Python