Django ORM基础教程:从原理到MySQL实战增删改查

追风的人
追风的人
发布时间:2026-10-13| 3人浏览过
原创

本文深入解析Django ORM机制,阐述对象关系映射原理及其优劣。详细演示如何在Django项目中配置MySQL连接,并通过Person模型实例,完整展示使用ORM进行数据表的创建、记录增加、删除、修改及查询的具体代码与操作步骤,帮助开发者高效掌握Django数据库交互核心技能。

ORM简介

ORM概念

对象关系映射(Object Relational Mapping,简称ORM)模式旨在解决面向对象编程与关系型数据库之间存在的互不匹配问题。

简而言之,ORM利用描述对象与数据库之间映射关系的元数据,自动将程序中的对象持久化保存到关系型数据库中。

ORM在业务逻辑层与数据库层之间起到了关键的桥梁作用。

ORM由来

让我们从O/R的概念开始。字母O代表“对象”(Object),而R代表“关系”(Relational)。

在几乎所有的软件开发过程中,都会涉及对象与关系数据库的交互。在用户界面和业务逻辑层面,我们主要面向对象进行开发。当对象的状态发生变化时,我们需要将这些对象信息存储到关系数据库中。

若采用传统开发方式,程序员往往需要在业务逻辑代码中混杂大量的SQL语句,用于执行数据的增加、读取、修改和删除操作,而这些SQL代码通常具有高度的重复性。

ORM的优势

ORM主要解决对象与关系的映射问题。它通常将一个类与数据库表进行一一映射,类的每个实例对应表中的一条记录,类的每个属性对应表中的一个字段。

ORM提供了对数据库的映射功能,开发者无需直接编写SQL代码,只需像操作普通对象一样对数据库数据进行操作即可。

这使得软件开发人员能够专注于业务逻辑的处理,从而显著提高了开发效率。

ORM的劣势

ORM的缺点在于,它会在一定程度上牺牲程序的执行效率。

此外,过度依赖ORM可能导致开发者不擅长编写SQL语句,进而使关系数据库的相关技能出现退化。

ORM总结

ORM仅仅是一种工具,它确实能够解决一些重复且简单的劳动,这一点是毋庸置疑的。

然而,我们不能期望某个工具能一劳永逸地解决所有问题,某些特殊情况仍需进行特殊处理。

但在整个软件开发过程中,需要特殊处理的情况通常占比较小,否则这类工具也就失去了其存在的意义。

Django连接MySQL数据库

1. 在Django项目的settings.py文件中,配置数据库连接信息:

DATABASES = {
 "default": {
 "ENGINE": "django.db.backends.mysql",
 "NAME": "你的数据库名称", # 需要自己手动创建数据库
 "USER": "数据库用户名",
 "PASSWORD": "数据库密码",
 "HOST": "数据库IP",
 "POST": 3306
 }
}

2. 在Django项目(注意,是项目目录下的,而非app目录)的__init__.py文件中添加如下代码,告知Django使用pymysql模块来连接MySQL数据库:

import pymysql
pymysql.install_as_MySQLdb()

3. 如需在PyCharm中进行视图操作,请参考相关配置(见图示)。

 

Django中ORM的(简单)增删改查

增

增加表

以下示例定义了一个Person模型,包含first_name和last_name两个字段。

from django.db import models
class Person(models.Model):
 first_name = models.CharField(max_length=30)
 last_name = models.CharField(max_length=30)

随后执行以下命令:

python manage.py makemigrations
python manage.py migrate

first_name和last_name均为模型的字段。每个字段被指定为一个类属性,每个属性映射到数据库中的一个列。

上述Person模型将会创建如下结构的数据库表:

CREATE TABLE myapp_person (
 "id" serial NOT NULL PRIMARY KEY,
 "first_name" varchar(30) NOT NULL,
 "last_name" varchar(30) NOT NULL
);

增加数据

models.Person.object.create(first_name='fu',last_name='yong')

删

models.Person.object.get(id=1).delete()

改

obj = models.Person.object.get(id=1)
obj.last_name = 'xiaoyong'<br data-filtered="filtered"><br data-filtered="filtered">obj.save()

查

models.Person.object.all() #查找所有记录,返回一个queryset对象
models.Person.object.get(字段=值) #按照字段查找

总结

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对本站的支持。

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

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 算法库。