Django 6中文教程

4.3 基础 CRUD 操作

Django6基础CRUD操作全面教程:数据创建、查询、更新、删除

Django 6中文教程

本教程为Django6初学者提供详细的CRUD操作指南,涵盖数据创建(create方法和对象实例化保存)、查询(get、filter、all与条件筛选)、更新(update方法和对象属性修改保存)、删除(delete方法和批量删除),附带代码示例,帮助快速掌握Django核心数据操作。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

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开发的核心技能之一。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包