Django ORM 进行基础 CRUD 操作(创建、读取、更新、删除)
Django 是一个流行的 Python web 框架,提供了很多实用的功能来帮助开发者快速构建 web 应用程序。Django 的 ORM(Object-Relational Mapping)是其强大的数据库工具之一。ORM 的作用是将数据库中的表和 Python 对象进行映射,使得开发者可以通过 Python 代码操作数据库,而不需要手动编写 SQL 语句。
本文将详细介绍如何使用 Django ORM 进行最基本的数据库操作,也就是常说的 CRUD 操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。
一、准备工作:设置 Django 项目和模型
在开始之前,你需要有一个 Django 项目以及一个定义好的模型。我们假设已经有了一个名为 myapp
的应用,并且我们要操作一个用户模型 User
。该模型包含用户名、电子邮件和年龄字段。我们将在这个模型的基础上进行 CRUD 操作。
1. 安装并创建 Django 项目
首先,如果你还没有安装 Django,可以使用 pip 来安装它:
bash
pip install django
安装完成后,使用以下命令创建一个新的 Django 项目和应用:
bash
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
在应用 myapp
中创建一个简单的模型 User
。修改 myapp/models.py
文件,添加如下内容:
python
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField(unique=True)
age = models.IntegerField()
def __str__(self):
return self.name
这个模型 User
有三个字段:name
(用户的名字)、email
(电子邮件)和 age
(年龄)。定义模型后,别忘了将 myapp
添加到项目的 settings.py
中:
python
INSTALLED_APPS = [
# 其他已安装的应用
'myapp',
]
2. 进行数据库迁移
在 Django 中,每次修改模型时,都需要生成迁移文件并应用迁移。使用以下命令生成迁移文件并将模型应用到数据库:
bash
python manage.py makemigrations
python manage.py migrate
现在,我们的数据库中已经有了 User
表,并且可以开始进行 CRUD 操作了。
二、创建(Create)操作
1. 创建对象并保存到数据库
在 Django ORM 中,创建数据非常简单。我们可以直接创建模型对象并调用 .save()
方法将其保存到数据库。例如,我们可以在 Django shell 中创建一个新用户:
首先,启动 Django shell:
bash
python manage.py shell
在 shell 中,执行以下代码:
python
from myapp.models import User
# 创建一个新的用户对象
user = User(name='Alice', email='alice@example.com', age=25)
# 保存到数据库
user.save()
print(user.id) # 输出新创建用户的 ID
通过这段代码,我们创建了一个新的 User
对象,并通过 save()
方法将其保存到了数据库中。user.id
会返回新创建的用户在数据库中的主键 ID。
2. 使用 create()
方法
Django 提供了一种更简洁的方法来创建和保存对象:create()
。create()
方法可以一步到位地完成创建和保存对象的操作。你可以像这样使用它:
python
User.objects.create(name='Bob', email='bob@example.com', age=30)
这将直接在数据库中创建一个新用户,并且无需手动调用 save()
方法。
三、读取(Read)操作
读取操作是从数据库中获取数据。在 Django ORM 中,你可以通过查询集(QuerySet)来获取模型实例。Django 的查询集非常强大,允许你进行多种过滤和排序操作。
1. 获取所有对象
使用 all()
方法可以获取所有 User
对象:
python
users = User.objects.all()
for user in users:
print(user.name, user.email, user.age)
all()
方法返回一个包含所有 User
对象的查询集。你可以遍历这个查询集来访问每个对象的属性。
2. 根据条件过滤对象
你可以使用 filter()
方法来根据特定条件查询对象。假设我们想要获取所有年龄大于 25 的用户,可以这样做:
python
users = User.objects.filter(age__gt=25) # age__gt 表示大于 25
for user in users:
print(user.name, user.age)
Django 提供了丰富的查询条件操作符,如 lt
(小于)、gte
(大于等于)、exact
(精确匹配)等。
3. 获取单个对象
如果你只想获取单个对象,可以使用 get()
方法。get()
需要确保查询结果只有一条记录,否则会抛出异常。例如,按邮箱地址查询用户:
python
user = User.objects.get(email='alice@example.com')
print(user.name, user.age)
注意,如果没有匹配的记录,get()
会抛出 User.DoesNotExist
异常;如果有多条记录满足条件,get()
会抛出 MultipleObjectsReturned
异常。
4. 使用 values()
和 values_list()
有时候你只想获取对象的某些字段,而不是整个对象。可以使用 values()
或 values_list()
来只获取指定的字段:
python
# 获取所有用户的名字和年龄
users = User.objects.values('name', 'age')
for user in users:
print(user['name'], user['age'])
# 获取所有用户的名字(返回一个列表)
user_names = User.objects.values_list('name', flat=True)
print(user_names)
values()
返回的是字典,而 values_list()
返回的是元组。如果 flat=True
,则 values_list()
返回单个字段的值的列表。
四、更新(Update)操作
1. 更新单个对象
要更新对象的某些字段,可以简单地修改对象属性并调用 save()
方法。比如我们想要修改某个用户的年龄:
python
user = User.objects.get(email='alice@example.com')
user.age = 26
user.save()
这段代码会更新 user
对象的年龄并将更改保存到数据库。
2. 使用 update()
方法
如果你想要批量更新多个对象,可以使用 update()
方法。update()
会直接在数据库中执行更新操作,而无需先获取对象。假设我们想将所有年龄大于 30 的用户的年龄增加 1 岁:
python
User.objects.filter(age__gt=30).update(age=models.F('age') + 1)
这里的 F()
对象表示数据库中的字段值,models.F('age') + 1
表示在原有的基础上加 1。
五、删除(Delete)操作
1. 删除单个对象
删除对象的方法非常简单。获取到对象后,调用 .delete()
方法即可:
python
user = User.objects.get(email='alice@example.com')
user.delete()
这将从数据库中删除对应的记录。
2. 批量删除对象
你也可以使用查询集来批量删除多个对象。例如,我们想要删除所有年龄大于 40 的用户:
python
User.objects.filter(age__gt=40).delete()
这会删除所有符合条件的用户。注意,delete()
不会调用模型的 save()
方法,因此不会触发 save()
中定义的任何逻辑。
六、总结
Django ORM 提供了强大的工具,帮助开发者用简单、优雅的 Python 代码与数据库进行交互,而无需直接编写 SQL 语句。通过 CRUD 操作,你可以轻松地创建、读取、更新和删除数据库中的数据。
1. 创建(Create)
- 使用
save()
方法或create()
方法创建并保存对象到数据库。
2. 读取(Read)
- 使用
all()
方法获取所有记录。 - 使用
filter()
进行条件查询。 - 使用
get()
获取单个对象。 - 使用
values()
或values_list()
仅获取指定字段。
3. 更新(Update)
- 修改对象的属性并调用
save()
方法保存更改。 - 使用
update()
方法批量更新对象。
4. 删除(Delete)
- 使用
.delete()
方法删除单个对象或批量删除多个对象。
通过这些简单的操作,Django ORM 可以大大简化与数据库的交互过程,使得 web 开发更加高效和直观。无论你是初学者还是有经验的开发者,掌握这些 CRUD 操作是使用 Django ORM 的基础技能。