4.3 基础 CRUD 操作
Django6基础CRUD操作全面教程:数据创建、查询、更新、删除
本教程为Django6初学者提供详细的CRUD操作指南,涵盖数据创建(create方法和对象实例化保存)、查询(get、filter、all与条件筛选)、更新(update方法和对象属性修改保存)、删除(delete方法和批量删除),附带代码示例,帮助快速掌握Django核心数据操作。
Django6基础CRUD操作教程
CRUD(Create, Retrieve, Update, Delete)是数据库操作的基础,在Django中通过模型(Model)轻松实现。本教程将详细讲解Django6中的CRUD操作,适合新人学习。我们以一个简单的模型为例:假设有一个Book模型,用于管理书籍信息。
# 在models.py中定义模型
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100, verbose_name='书名')
author = models.CharField(max_length=50, verbose_name='作者')
published_date = models.DateField(verbose_name='出版日期')
price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='价格')
1. 数据创建(Create)
数据创建是向数据库添加新记录的过程。Django提供了两种常见方法:使用create()方法和对象实例化后保存。
使用create()方法
create()是模型管理器(objects)的一个快捷方法,直接创建并保存对象。
# 在视图或脚本中操作
from myapp.models import Book
# 使用create()方法创建一条新记录
book = Book.objects.create(
title='Django入门指南',
author='张三',
published_date='2023-01-01',
price=29.99
)
print(f'创建书籍:{book.title}')
- 优点:简洁,一行代码完成创建和保存。
- 注意:确保提供所有必需的字段(根据模型定义)。
对象实例化保存
先创建对象实例,然后调用save()方法保存到数据库。
# 实例化对象并保存
book = Book(
title='Python进阶教程',
author='李四',
published_date='2023-02-01',
price=39.99
)
book.save() # 调用save()方法保存
print(f'保存书籍:{book.title}')
- 优点:可以在保存前修改对象属性。
- 注意:
save()方法会触发数据库插入操作。
2. 数据查询(Retrieve)
数据查询是从数据库检索记录的过程。Django提供了多种查询方法,包括all()、filter()、get()和条件筛选。
使用all()方法
all()方法返回模型的所有记录,返回一个QuerySet对象。
# 获取所有书籍记录
all_books = Book.objects.all()
for book in all_books:
print(book.title)
- 用途:快速查看所有数据。
- 注意:QuerySet是惰性的,只有在使用时才会执行查询。
使用filter()方法
filter()方法基于条件筛选记录,返回符合条件的QuerySet。
# 筛选作者为'张三'的书籍
filtered_books = Book.objects.filter(author='张三')
for book in filtered_books:
print(f'筛选结果:{book.title}')
# 组合条件筛选
books = Book.objects.filter(author='张三', price__gte=30) # price大于等于30
- 条件筛选:可以使用字段查找(如
__gte表示大于等于)。 - 返回:QuerySet,可以链式调用其他方法。
使用get()方法
get()方法返回单个对象,通常用于精确匹配。如果找到多个或没有找到,会抛出异常。
# 获取特定ID的书籍
try:
book = Book.objects.get(id=1)
print(f'查询到书籍:{book.title}')
except Book.DoesNotExist:
print('书籍不存在')
except Book.MultipleObjectsReturned:
print('找到多个匹配项')
- 用途:当确定只有一个匹配项时使用。
- 安全:建议使用
try-except处理异常。
条件筛选进阶
Django支持丰富的查询表达式,如__contains(包含)、__in(在列表中)等。
# 查询书名包含'Django'的书籍
books = Book.objects.filter(title__contains='Django')
# 查询价格在30到50之间的书籍
books = Book.objects.filter(price__range=(30, 50))
3. 数据更新(Update)
数据更新是修改现有记录的过程。有两种方式:使用update()方法或修改对象属性后保存。
使用update()方法
update()方法直接更新数据库中的记录,高效且批量操作。
# 将所有作者为'张三'的书籍价格更新为35.00
updated_count = Book.objects.filter(author='张三').update(price=35.00)
print(f'更新了{updated_count}条记录')
- 优点:性能高,避免多次数据库查询。
- 注意:只更新指定字段,不触发模型的
save()信号。
对象属性修改保存
先获取对象,修改属性,再调用save()方法保存。
# 修改单个书籍的价格
book = Book.objects.get(id=1)
book.price = 45.99
book.save() # 保存更改
print(f'更新书籍价格:{book.title}')
- 优点:灵活,可以触发模型的保存逻辑(如信号)。
- 注意:如果对象已存在,
save()会执行更新操作。
4. 数据删除(Delete)
数据删除是从数据库中移除记录的过程。可以使用delete()方法或批量删除。
使用delete()方法
delete()方法删除对象或QuerySet中的所有记录。
# 删除单个书籍
book = Book.objects.get(id=1)
book.delete() # 删除该对象
print('书籍已删除')
# 删除符合条件的多个书籍
Book.objects.filter(author='李四').delete() # 删除所有作者为'李四'的书籍
- 安全:删除操作是不可逆的,建议谨慎使用。
- 批量删除:直接从QuerySet调用
delete()。
批量删除操作
Django的delete()方法本身支持批量操作,无需额外步骤。
# 批量删除所有价格低于20的书籍
deleted_count = Book.objects.filter(price__lt=20).delete()
print(f'批量删除了{deleted_count[0]}条记录')
- 返回值:
delete()返回一个元组,包含删除的对象数量和详细信息。 - 效率:批量删除减少数据库交互,提高性能。
总结
本教程详细介绍了Django6中的基础CRUD操作:
- 创建:使用
create()或对象实例化保存。 - 查询:使用
all()、filter()、get()和条件筛选。 - 更新:使用
update()或对象属性修改保存。 - 删除:使用
delete()方法支持单个和批量删除。
通过实践这些操作,新人可以快速上手Django的数据管理。建议在项目环境中尝试代码示例,加深理解。Django的ORM(对象关系映射)使得数据库操作变得简单直观,是Web开发的核心技能之一。