Django执行原生MySQL语句的三种方式详解

小鹿同学
小鹿同学
发布时间:2026-10-14| 5人浏览过
原创

本文详细解析Django中执行原生MySQL语句的三种主要方式:利用extra方法修改查询集、通过raw方法返回模型实例以及使用数据库游标执行自定义SQL。文章对比了各方法的依赖关系、适用场景及具体代码实现,帮助开发者根据需求选择最合适的数据库操作方案。

Django执行原生MySQL语句概述

在Django框架中,有时需要直接执行原生的MySQL语句以处理复杂查询或优化性能。本文将介绍几种实现方式。

第一种方式是使用extra方法。这是一种结果集修改器,允许开发者在查询过程中提供额外的查询参数,从而灵活地调整最终返回的数据集。

需要注意的是,extra方法的使用依赖于Django的Model模型定义,它是在ORM层之上进行的扩展操作。

使用extra方法修改查询集

具体使用方式如下:

可以将extra参数放置在where子句中,用于添加额外的过滤条件。例如,在已有过滤基础上追加特定的标题匹配条件。

    Book.objects.filter(publisher_id="1").extra(where=["title='python学习1'"])    

此外,extra还可以用于select子句,允许在查询结果中引入额外的计算字段或聚合统计值,如直接调用SQL函数进行计数。

    Book.objects.filter(publisher_id="1").extra(select={"count":"select count(*) from hello_book"})

使用raw方法返回模型实例

第二种方式是使用raw方法。

raw方法用于执行原始SQL语句,并尝试将结果映射回Django模型实例。这种方式返回的是模型对象,便于后续使用ORM特性进行操作。

由于raw方法返回的是模型实例,因此它依赖于Model的定义,通常更适用于查询场景,而非数据修改。

使用示例如下:通过raw方法传入完整的SELECT语句,获取对应的模型对象列表。


book = Book.objects.raw("select * from hello_book") #返回模型实例
    for item in book:
      print(item.title)

利用游标执行自定义SQL

第三种方式是执行自定义SQL,这通常通过直接操作数据库游标来实现。

这种方式的核心是利用数据库连接对象获取游标,进而执行任意SQL命令。

首先需要导入Django提供的connection对象:from django.db import connection。

与extra和raw不同,游标方式不依赖于Model模型,提供了最大的灵活性,适用于增删改查所有类型的SQL操作。

具体使用流程包括获取游标、执行SQL语句以及处理返回结果。

代码实现示例如下:

from django.db import connection cursor = connection.cursor() # 插入 cursor.execute("insert into hello_author(name) values('xiaol')") # 更新 cursor.execute("update hello_author set name='xiaol' where id=1") # 删除 cursor.execute("delete from hello_author where name='xiaol'") # 查询 cursor.execute("select * from hello_author") # 返回一行 raw = cursor.fetchone() print(raw) # 返回所有 # cursor.fetchall()

综上所述,Django提供了多种执行原生SQL的途径。开发者应根据是否依赖模型、操作类型(查询或修改)以及性能需求,选择extra、raw或游标方式。希望本文内容能对您的学习有所帮助,欢迎继续支持本站获取更多技术资讯。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。