[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
{
这样就比較easy发现程序不好的写法,及时纠正了。
兴许:
这样改动之后打印的日志仅仅有查询语句,插入更新删除语句的debug,在读源代码之后分享出来。
本文出自 “orangleliu笔记本”博客。请务必保留此出处http://blog.csdn.net/orangleliu/article/details/40115471
[Django] 查看orm自己主动运行的原始查询sql的更多相关文章
- Django中ORM模型总结(一)[概述,查询语句]
理解ORM框架 概述 O:(objects)->类和对象. R:(Relation)->关系,关系数据库中的表格. M:(Mapping)->映射. 作用: 可以通过类和类对象就可以 ...
- Django【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)
django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many); ...
- Django的ORM那些相关操作
一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 & ...
- Django之ORM操作
Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...
- Django之ORM表操作
ORM表操作 1.ORM单表操作 首先想操作表的增删改查,需要先导入这个表,以之前创建的UserInfo表为例,在app下的views.py中导入 from app import models def ...
- python django -2 ORM模型
ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...
- Django models ORM基础操作--白话聊Django系列
上次我们讲完了views视图,那我们这次来看一下Django强大的ORM,可以这么说,你不懂Django的ORM,你就不懂Django,那废话不多说 ORM又称关系对象映射,在ORM里,一张表就是一个 ...
- Django 的ORM 表间操作
Django之ORM表间操作 之前完成了简单的数据库数据增加操作.这次学习更多的表间操作. 单表操作 增加 方式一 b = Book(title="Python基础", pub ...
- Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用
Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...
随机推荐
- webpack 环境搭建+实现热更新
让我们一起构建一个小的app 为了便于你更好的了解Webpack带来的好处,我们将会构建一个非常小的app并将资源文件打包.在这个教程中我推荐基于Node4或Node5和NPM3来进行开发,这样就避免 ...
- webdriver高级应用- 测试过程中发生异常或断言失败时进行屏幕截图
封装了三个类来实现这个功能: 1.DataUtil.py 用于获取当前的日期以及时间,用于生成保存截图文件的目录名,代码如下: #encoding=utf-8 import time from dat ...
- P2564 生日礼物
生日礼物 洛谷链接 题目描述: 在一段彩带上有不同颜色的彩珠,求出包含所有颜色彩珠的最短彩带长度. 思路: 我们可以把按彩珠的位置把所有彩珠排一下序,然后从1开始遍历这些彩珠,并记录出现过的颜色数目, ...
- ansible /usr/bin/python: not found
使用ansible命令的时候出错 ansible all -m ping 出现报错 192.168.199.154 | FAILED! => { "changed": fal ...
- beautifusouptest
from bs4 import BeautifulSoupimport urllib.requesturl = "http://www.douban.com/tag/%E5%B0%8F%E8 ...
- CodeForces839D[莫比乌斯反演] Codeforces Round #428 (Div. 2)
/*CodeForces839D[莫比乌斯反演]*/ #include <bits/stdc++.h> typedef long long LL; const LL MOD = 10000 ...
- 【Luogu】P2254瑰丽华尔兹(堆优化DP)
题目链接 我也不知道为什么脑子一抽就想了个堆优化……然后贼慢…… 因为上午听不懂wys的电音专场(快速傅立叶变换),然后就做了这么一道题. 首先朴素DP很sb都能秒出.就是枚举时刻.位置(两维)然后转 ...
- 具体knn算法概念参考knn代码python实现
具体knn算法概念参考knn代码python实现上面是参考<机器学习实战>的代码,和knn的思想 # _*_ encoding=utf8 _*_ import numpy as npimp ...
- POJ3349 Snowflake Snow Snowflakes 【哈希表】
题目 很简单,给一堆6元组,可以从任意位置开始往任意方向读,问有没有两个相同的6元组 题解 hash表入门题 先把一个六元组的积 + 和取模作为hash值,然后查表即可 期望\(O(n)\) #inc ...
- 我要好offer之 字符串相关大总结
1. str*系列手写代码 a. 一定要注意末尾'\0'的处理,切记切记 b. 一定要对输入做有效性判断,多用断言就是了 int Strlen(const char* str) { assert(st ...