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

相关推荐
java_heartLake6 小时前
PostgreSQL数据库参数调优实践
数据库·postgresql·调优
xnuscd7 小时前
Milvus概念
数据库·学习·mysql
代码欢乐豆8 小时前
软件工程第13章小测
服务器·前端·数据库·软件工程
刘天远8 小时前
django实现paypal订阅记录
后端·python·django
小gpt&9 小时前
实现qt拖拽显示或者播放
数据库·qt·音视频
望获linux9 小时前
在 ARM 平台上如何实现Linux系统的1秒启动
linux·服务器·开发语言·数据库·操作系统·嵌入式操作系统·arm平台
漫天转悠9 小时前
MySQL 七种JOIN连接详解
数据库·mysql
尘浮生9 小时前
Java项目实战II基于Java+Spring Boot+MySQL的智能停车计费系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·mysql·微信小程序·maven
quintin-lee9 小时前
PostgreSQL中的内存上下文管理
数据库·postgresql
蚂蚁在飞-9 小时前
一个高度可扩展的 Golang ORM 库【GORM】
数据库·oracle·golang