社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

为Django查询生成原始SQL查询的3种方法

马哥Linux运维 • 3 年前 • 409 次点击  

我们使用Django ORM使查询数据库变得非常容易,但是如果我们知道幕后发生了什么或对某些Django查询执行了什么SQL查询,对我们提升查询性能帮助会非常的大,以下是一些有用的方法,能帮助我们了解幕后的SQL语句是什么。

1.使用queryset的查询属性
这是在Django中查找原始SQL查询的最简单方法。

>>>queryset = Organization.objects.all()>>>print(queryset.query) Output:SELECT "app_organization"."id", "app_organization"."name", "app_organization"."created","app_organization"."updated"" FROM "app_organization">>>str(queryset.query)Output:'SELECT "app_organization"."id", "app_organization"."name", "app_organization"."created", "app_organization"."updated" FROM "app_organization"'


2.Django  connection

  这种方法比前一种方法提供的信息更多,因为我们可以找到原始SQL语句以及执行该语句所需的时间(以秒为单位)。
需要确保在settings.py文件中将此设置为DEBUG = True。

>>>from django.db import connection,reset_queries>>>Organization.objects.all()>>>connection.queriesOutput:[{'sql': 'SELECT "app_organization"."id", "app_organization"."name", "app_organization"."created", "app_organization"."updated" FROM "app_organization" LIMIT 21','time': '0.001'}]>>>reset_queries()Output:[]

注意:reset_queries()可随时用于手动清除查询列表。


3.Django调试工具栏
     Django Debug Toolbar是一组可配置的面板,显示有关当前请求/响应的各种调试信息,单击该工具时,将显示有关面板内容的更多详细信息,包括所有SQL查询,如图:


要在django项目中设置此工具栏,首先需要安装:

pip install django-debug-toolbar

然后在settings.py文件中设置DEBUG = True。

将“ debug_toolbar”添加到INSTALLED_APPS设置中。




    

INSTALLED_APPS = [ 'debug_toolbar',]

将调试工具栏的URL添加到项目的URLconf中。

import debug_toolbarfrom django.conf import settingsfrom django.urls import include, pathurlpatterns = [ ... path('__debug__/', include(debug_toolbar.urls)),]

调试工具栏主要在中间件中实现,应尽可能早地放在列表中。在settings.py模块中启用它,如下所示:

MIDDLEWARE = [# ... 'debug_toolbar.middleware.DebugToolbarMiddleware',# ...]

限制访问的IP地址,在INTERNAL_IPS设置的IP访问,才会显示“调试工具栏”。例如:对于本地开发,必须在INTERNAL_IPS中添加“ 127.0.0.1”。

INTERNAL_IPS = [# ... '127.0.0.1',# ...]

文章转载:Python运维技术

(版权归原作者所有,侵删)


点击下方“阅读原文”查看更多

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/115301
 
409 次点击