Django ORM整理

1. 什么是Django ORM?

Django ORM(Object-Relational Mapping)是Django框架自带的一种数据访问层,用于将数据库中的数据映射到Python对象中。它提供了一个方便的方式来操作数据库,无需直接编写SQL语句。

2. Django ORM的优势

Django ORM有以下几个优势:

2.1 简单易用

Django ORM提供了一个简单易用的API,可以轻松地执行数据库操作,例如创建、更新和删除数据。

2.2 跨数据库支持

Django ORM支持多种数据库,包括MySQL、PostgreSQL、SQLite等,可以在不同的数据库之间无缝切换。

2.3 数据库迁移

Django ORM提供了强大的数据库迁移功能,可以轻松地进行数据库结构的变更,而无需手动编写SQL语句。

2.4 查询表达式

Django ORM提供了丰富的查询表达式,可以进行复杂的查询操作,包括过滤、排序、聚合等。

2.5 缓存

Django ORM支持缓存数据查询的结果,可以提高查询的性能。

3. Django ORM的基本用法

3.1 定义模型

在使用Django ORM之前,需要先定义模型(Model),模型是对数据库表的抽象。

from django.db import models

class Book(models.Model):

title = models.CharField(max_length=100)

author = models.CharField(max_length=50)

publication_date = models.DateField()

price = models.DecimalField(max_digits=5, decimal_places=2)

上面的代码定义了一个名为Book的模型,包括几个字段:title、author、publication_date和price。

3.2 数据库迁移

在定义完模型后,需要进行数据库迁移,将模型映射到数据库中的表。

python manage.py makemigrations

python manage.py migrate

上述命令会自动创建一个名为book的表,该表包含了前面定义的字段。

3.3 数据操作

使用Django ORM进行数据操作非常简单,例如创建一条新的数据记录:

book = Book(title='Django for Beginners', author='John Smith', publication_date='2021-01-01', price=29.99)

book.save()

上述代码创建了一条新的Book数据记录,并保存到数据库中。

还可以使用Django ORM进行数据查询,例如查询所有的Book记录:

books = Book.objects.all()

上述代码将返回所有的Book记录。

4. 使用Django ORM进行查询

4.1 过滤查询

Django ORM提供了多种过滤查询的方式,例如:

# 查询价格低于30的书籍

books = Book.objects.filter(price__lt=30)

# 查询作者为John Smith的书籍

books = Book.objects.filter(author='John Smith')

# 查询标题包含"django"的书籍

books = Book.objects.filter(title__contains='django')

4.2 排序查询

Django ORM支持对查询结果进行排序:

# 按照价格从低到高排序

books = Book.objects.order_by('price')

# 按照价格从高到低排序

books = Book.objects.order_by('-price')

4.3 聚合查询

Django ORM支持对查询结果进行聚合操作,例如:

from django.db.models import Count

# 统计每个作者的书籍数量

authors = Book.objects.values('author').annotate(num_books=Count('id'))

上述代码将返回一个包含作者和对应书籍数量的QuerySet。

5. 总结

Django ORM是Django框架提供的强大的数据访问层,提供了简单易用的API,支持多种数据库和数据库迁移功能。通过Django ORM,开发者可以轻松地进行数据库操作,包括数据的新增、修改、删除和查询。同时,Django ORM还提供了丰富的查询功能,可以进行过滤、排序和聚合等复杂的查询操作。

后端开发标签