Django ORM 进行基础 CRUD 操作(创建、读取、更新、删除)

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 的基础技能。

相关推荐
喝旺仔la25 分钟前
Django后台接口开发
后端·python·django
无忧无虑Coding27 分钟前
Django入门教程——数据模型建立
数据库·django·sqlite
MXsoft61844 分钟前
监控易监测对象及指标之:Canal中间件监控
大数据·数据库
知识中的海王1 小时前
已解决sqlalchemy.exc.OperationalError: (pymssql._pymssql.OperationalError) (18456
数据库·python
2401_858120261 小时前
SpringBoot框架:闲一品交易平台的创新驱动
数据库·spring boot·oracle
CopyLower2 小时前
Redis 分布式锁:原理、实现及最佳实践
数据库·redis·分布式
尘浮生2 小时前
Java项目实战II基于微信小程序的计算机实验室排课与查询系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·mysql·微信小程序·小程序
工业互联网专业2 小时前
Python毕业设计选题:基于协同过滤的校园音乐推荐系统小程序-django+uniapp
python·小程序·django·uni-app·毕业设计·源码·课程设计
A阳俊yi2 小时前
数据库(31)——事务
数据库·oracle