Django ORM

简介: 【8月更文挑战第23天】

Django ORM(Object-Relational Mapping,对象关系映射)允许你用Python代码来操作数据库——创建、查询、更新和删除数据。

1. 创建模型

首先,你需要定义一个模型(Model),它是一个Python类,继承自 django.db.models.Model。模型中的每个属性通常对应数据库中的一个字段。

# app01/models.py

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=32)  # 书籍名称
    price = models.DecimalField(max_digits=5, decimal_places=2)  # 书籍价格
    publish = models.CharField(max_length=32)  # 出版社名称
    pub_date = models.DateField()  # 出版时间

2. 更新 settings.py

确保你的应用(在这个例子中是 app01)已经添加到项目的 settings.py 文件的 INSTALLED_APPS 配置中。

# settings.py

INSTALLED_APPS = (
    # ...
    'app01',  # 添加这行
    # ...
)

3. 数据库迁移

定义好模型后,需要执行迁移命令来创建数据库表。

python manage.py makemigrations app01  # 创建迁移文件
python manage.py migrate app01         # 应用迁移到数据库

4. 数据库添加

你可以使用Django ORM 来添加数据。有两种常见的方法:

  • 实例化模型类并保存
# app01/views.py

from .models import Book

def add_book(request):
    book = Book(title="示例书籍", price=88.88, publish="示例出版社", pub_date="2024-01-01")
    book.save()  # 保存到数据库
    # ...
  • 使用 create() 方法(推荐方式):
from .models import Book

def add_book(request):
    Book.objects.create(
        title="示例书籍",
        price=88.88,
        publish="示例出版社",
        pub_date="2024-01-01",
    )
    # ...

5. 数据查询

Django ORM 提供了多种查询方法:

  • 查询所有记录
books = Book.objects.all()
  • 查询特定记录
book = Book.objects.get(pk=1)  # 根据主键查询
books = Book.objects.filter(title__contains="示例")
  • 查询符合条件的记录数量
count = Book.objects.count()

6. 数据更新

  • 更新特定记录
book = Book.objects.get(pk=1)
book.price = 99.99
book.save()
  • 批量更新记录
updated_count = Book.objects.filter(title__contains="示例").update(price=99.99)

7. 数据删除

  • 删除特定记录
book = Book.objects.get(pk=1)
book.delete()
  • 批量删除记录
deleted_count = Book.objects.filter(title__contains="示例").delete()

8. 常见查询方法

Django ORM 提供了丰富的查询表达式,例如:

  • __in: 查询在给定列表中的值。
  • __range: 查询在指定范围内的值。
  • __gt: 大于。
  • __gte: 大于等于。
  • __lt: 小于。
  • __lte: 小于等于。
  • __contains: 包含子字符串。
  • __icontains: 不区分大小写地包含子字符串。
  • __startswith: 以指定字符串开始。
  • __endswith: 以指定字符串结束。

9. 排序和逆序

  • 排序
books = Book.objects.order_by('price')  # 升序
books = Book.objects.order_by('-price')  # 降序
  • 逆序
books = Book.objects.reverse()

10. 分页

Django ORM 也支持对查询结果进行分页。

from django.core.paginator import Paginator

books = Book.objects.all()
paginator = Paginator(books, 10)  # 每页10条数据
page = paginator.get_page(1)  # 获取第一页
目录
相关文章
|
1月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
58 0
|
3月前
|
数据管理 数据挖掘 调度
Django后端架构开发:URLconf到ORM深度剖析
Django后端架构开发:URLconf到ORM深度剖析
55 1
|
3月前
|
API 数据库 开发者
【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
39 0
|
3月前
|
SQL Go 数据库
Django入门到放弃之ORM多表操作
Django入门到放弃之ORM多表操作
|
3月前
|
SQL 关系型数据库 MySQL
Django入门到放弃之ORM单表操作
Django入门到放弃之ORM单表操作
|
4月前
|
SQL 数据库 Python
Django框架数据库ORM查询操作(6)
【7月更文挑战第6天】```markdown Django ORM常用数据库操作:1) 查询所有数据2) 根据ID查询 3) 精确查询 4) 分页排序
72 1
|
5月前
|
SQL 缓存 数据库
Django中ORM性能调优
【6月更文挑战第19天】 1. **索引优化**:使用`db_index=True`为模型字段创建索引,提升查询速度。 2. **批量操作**:批量创建和更新,减少数据库交互。 3. **查询优化**:利用`select_related`和`prefetch_related`减少查询次数。 4. **缓存**:使用内置缓存或Redis减少数据库访问。 5. **异步任务**:用Celery处理耗时操作,提高响应速度。 6. **数据库连接池**:管理连接,减少创建和销毁开销。 7. **SQL直接操作**:在必要时用原生SQL,避免ORM性能瓶颈。 8. **分页查询**:减少数据传输,改善用
82 10
|
5月前
|
JSON 缓存 数据库
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
|
5月前
|
存储 安全 数据库
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践
|
5月前
|
存储 SQL 数据处理
Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解
Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解