- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章获取django框架orm query执行的sql语句实现方法分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了获取django框架orm query执行的sql语句实现方法。分享给大家供大家参考,具体如下:
利用django orm 可以很方便的写出很多查询,但有时候,我们需要检查这些利用 orm 生成的 sql 语句是否正确,就需要检查这些orm 生成的 原生的sql 语句是否正确。经过测试有如下几种方法
1. 通过数据库的跟踪日志,可以看到查询的语句,比如mysql 就可以配置把所有的 sql 语句打印到日志中,但这种方式并不推荐,只是没有办法的时候才这么做.
2. 利用django query 提供的方法. 比如
1
2
3
|
queryset
=
mymodel.objects.
all
()
print
'query sql: '
+
str
(queryset .query)
#result:
|
我采用pydev 对 django 进行debug, 如下是截图,可以清楚的看到结果
3. 设置settings 里的 debug=true, 这个时候可以用这种方式来获取 。
1
2
|
from
django.db
import
connections
connections[
'default'
].queries
|
结果类似如下:
[{u'time': u'0.000', u'sql': u'select count(*) from `my_article` where `my_article`.`category` = 68 '}] 。
4. 利用三方提供的middleware 来实现,参考这里: https://djangosnippets.org/snippets/290/ 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
from
django.db
import
connection
from
django.conf
import
settings
import
os
def
terminal_width():
"""
function to compute the terminal width.
warning: this is not my code, but i've been using it forever and
i don't remember where it came from.
"""
width
=
0
try
:
import
struct, fcntl, termios
s
=
struct.pack(
'hhhh'
,
0
,
0
,
0
,
0
)
x
=
fcntl.ioctl(
1
, termios.tiocgwinsz, s)
width
=
struct.unpack(
'hhhh'
, x)[
1
]
except
:
pass
if
width <
=
0
:
try
:
width
=
int
(os.environ[
'columns'
])
except
:
pass
if
width <
=
0
:
width
=
80
return
width
class
sqlprintingmiddleware(
object
):
"""
middleware which prints out a list of all sql queries done
for each view that is processed. this is only useful for debugging.
"""
def
process_response(
self
, request, response):
indentation
=
2
if
len
(connection.queries) >
0
and
settings.debug:
width
=
terminal_width()
total_time
=
0.0
for
query
in
connection.queries:
nice_sql
=
query[
'sql'
].replace(
'"'
, '
').replace('
,
','
, ')
sql
=
"\033[1;31m[%s]\033[0m %s"
%
(query[
'time'
], nice_sql)
total_time
=
total_time
+
float
(query[
'time'
])
while
len
(sql) > width
-
indentation:
print
"%s%s"
%
(
" "
*
indentation, sql[:width
-
indentation])
sql
=
sql[width
-
indentation:]
print
"%s%s\n"
%
(
" "
*
indentation, sql)
replace_tuple
=
(
" "
*
indentation,
str
(total_time))
print
"%s\033[1;32m[total time: %s seconds]\033[0m"
%
replace_tuple
return
response
|
当然,定义了这个middleware之后,需要修改setting 里的配置 。
1
2
3
4
5
6
7
8
9
10
|
middleware_classes
=
(
'django.middleware.common.commonmiddleware'
,
'django.contrib.sessions.middleware.sessionmiddleware'
,
'django.middleware.csrf.csrfviewmiddleware'
,
'django.contrib.auth.middleware.authenticationmiddleware'
,
'django.contrib.messages.middleware.messagemiddleware'
,
'yihaomen.common.mymiddleware.sqlprintingmiddleware'
,
# 这是增加的显示sql语句的middleware
# uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.xframeoptionsmiddleware',
)
|
结果会打印所有执行的sql 语句, 推荐采用这种方式打印 sql 语句,因为比较方便,而且是插拔式的,不需要的时候去掉这个middleware就可以了,不过这只能在debug 模式下使用,对开发者来说足够了,生产环境不需要debug模式.
希望本文所述对大家基于django框架的python程序设计有所帮助.
原文链接:http://www.yihaomen.com/article/python/448.htm 。
最后此篇关于获取django框架orm query执行的sql语句实现方法分析的文章就讲到这里了,如果你想了解更多关于获取django框架orm query执行的sql语句实现方法分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
请提及(大)ORM 和微 ORM 之间的区别。与大型 ORM 相比,微型 ORM 有何优势?例如。 Entity Framework ORM 和 dapper micro ORM 之间的区别。 最佳答
我有一个名为 User 的模型。我可以从 User 模型扩展另一个模型 Admin/mod 吗?我找到了续集文档,但我没有找到 最佳答案 是的,查看 Associations documentatio
你对数据访问层有什么建议?使用 Entity Framework 和 Hibernate OR 代码生成器(如 Subsonic、.netTiers、T4 等)等 ORM? 最佳答案 对我来说,这很简
我编写了一个代码生成器,它为给定的 SQL Server/CE 数据库生成 POCO 和存储库。没什么花哨的,只有使用经典 ADO.Net 的简单 CRUD 程序。我的问题是,为什么我应该使用像 L2
我扩展了Android.Application类,以便保持状态(将应用程序用作单例)。 但是,我现在想使用Sugar ORM库简化我的数据库访问,但是Sugar文档(http://satyan.git
我正在阅读 OOP 设计模式和框架设计,发现自己对术语 ORM 和持久性框架之间的区别有点不确定。 ORM 是 PF 的一种吗?您可以期待两者有哪些不同的功能? 最佳答案 我将 ORM 定义为将任何数
在 Jboss EAP 7.0 中加载 orm 文件时,我遇到了以下问题,但它在 Weblogic 中工作。 原因:org.hibernate.boot.MappingException:无法解析显式
我一直在研究 Massive ORM。不要忘记,只是看,我还没有做任何编码。 我对保存交易数据的可能性感兴趣。我已经看到可以在一个事务中在同一个表中保存 20 行。但是当我想在单个交易中保存一个订单并
好的。我刚刚开始在我的 Coldfusion 应用程序中使用 ORM。到现在为止一切都很顺利。我遇到了这个障碍。我有这两张表: 这是我用来将数据加载到页面中的代码。 if 的第二部分是默认加载,第一部
我有可以分配许多类别的帖子。所以它是一个多对多的关系。 我想计算每个类别中有多少帖子(符合特定标准),然后对结果进行排序。 我有: Select ( Select count(post.id)
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 8年前关闭。 Improve t
我正在评估如何使用后端的分布式键/值存储来实现某些东西。我希望在支持对象模型的键/值之上有一个层,该对象模型类似于我从对象关系映射器中获得的模型。 任何人都可以指出其他人这样做的任何例子吗?我主要是在
我正在使用 kohana ORM 以便从数据库中获取一些结果。我的问题是:即使我查阅了文档,我也找不到只选择我感兴趣的列的方法。更明确地说,我有: $sale_stock = Model::facto
在 ORM 之前,如果我想显示规范化表的组合输出,我只需执行快速 CFQUERY,将表连接到我想要的字段并显示输出。我只是无法使用 ORM 来解决它。 例如这两个表: customers (id,
异步 ORM 的真正含义是什么?它与常规 ORM 的行为有何不同? 它可以用在什么地方? 最佳答案 这意味着对它的调用会立即返回(不会阻塞)。您会在稍后的某个时间点获得结果,很可能是由于回调触发。
虽然代码优先非常适合部署和开发,但我看不出如何在投入生产后以代码优先的方式插入对域模型所做的更改。 我如何处理我们在生产过程中积累的数据? 我是否应该手动将数据从 A 版架构迁移到 B 版架构?我是否
像学说(事件记录)和Xyster(数据映射器),有什么区别? 最佳答案 不同之处在于域对象与数据访问层的分离程度。使用 ActiveRecord,它是一个对象,这使它变得非常简单。特别是如果您的类一对
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我在 ColdFusion 中有一个持久实体,我需要更新一个属性 property name="createdDateTime" ormtype="date"; 到 property name="cr
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!