首页 > 代码库 > [Django] 查看orm自动执行的原始sql
[Django] 查看orm自动执行的原始sql
django的文档看了很多,也用了不少,有的时候感觉性能很不好,知道很多地方是惰性查询,但是对于复杂的逻辑,只是表面上发现运行很慢,机器资源消耗很多,却不知道orm到底是什么来转化成sql和查询的。
之前django1.3版本在google上找到了写方法,通过配置settings就能看到每次查询的原始sql,现在用1.6的版本也懒得去找了,反正在自己机子上看法,只是些简单的监视直接改下源码就好了。
于是翻了下django的源码,主要的sql执行语句在
D:\devsofts\python2.7\Lib\site-packages\django\db\models\sql\compiler.py 文件中
这里的D:\devsofts\python2.7是python的安装目录,每个人安装的可能不一样,自己找一下就行了,后面的目录基本是相同的。
在这个文件中查找execute_sql 方法,在758行左右。
在方法中执行sql之前加入一个print,就能在控制台看到sql执行的情况了。这里用的msyql数据库
print "connexesql ->%s"%sql cursor = self.connection.cursor() cursor.execute(sql, params)
效果:
connexesql ->SELECT `mngm_area`.`id` FROM `mngm_area` WHERE `mngm_area`.`parentid` = %s connexesql ->SELECT `mngm_device`.`mac` FROM `mngm_device` WHERE `mngm_device`.`area_id` IN (%s, %s, %s, %s, %s) ORDER BY `mngm_device`.`hostname` ASC connexesql ->SELECT `ad_material`.`id`, `ad_material`.`user_id`, `ad_material`.`name`, `ad_material`.`category`, `ad_material`.`anchor`, `ad_material`.`target`, `ad_material`.`note`, `ad_material`.`status`, `ad_material`.`addtime`, `ad_material`.`lastmodified` FROM `ad_material` WHERE `ad_material`.`id` = %s {connexesql ->SELECT `mngm_area`.`id` FROM `mngm_area` WHERE `mngm_area`.`parentid` = %s connexesql ->SELECT `mngm_device`.`mac` FROM `mngm_device` WHERE `mngm_device`.`area_id` IN (%s, %s, %s, %s, %s) ORDER BY `mngm_device`.`hostname` ASC connexesql ->SELECT `ad_material`.`id`, `ad_material`.`user_id`, `ad_material`.`name`, `ad_material`.`category`, `ad_material`.`anchor`, `ad_material`.`target`, `ad_material`.`note`, `ad_material`.`status`, `ad_material`.`addtime`, `ad_material`.`lastmodified` FROM `ad_material` WHERE `ad_material`.`id` = %s {
这样就比较容易发现程序不好的写法,及时纠正了。
本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/40115471
[Django] 查看orm自动执行的原始sql
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。