Django ORM 基本用法教程

Django ORM 基本用法教程

Django ORM(对象关系映射)是Django框架中非常重要的一个组件,它让我们可以使用Python代码来操作数据库,而不需要写原生SQL语句。下面介绍Django ORM的基本用法:

1. 模型定义

在Django中,我们通过定义Model类来创建数据库表:

1
2
3
4
5
6
7
8
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
price = models.DecimalField(max_digits=5, decimal_places=2)
publish_date = models.DateField()
def str(self):
return self.title

2. 数据库操作

2.1 创建记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
方法1
book = Book(
title="Django实战",
author="张三",
price=59.9,
publish_date="2024-01-01"
)
book.save()
方法2
Book.objects.create(
title="Python入门",
author="李四",
price=45.5,
publish_date="2024-02-01"
)

2.2 查询记录

1
2
3
4
5
6
7
8
9
获取所有记录
books = Book.objects.all()
获取单条记录
book = Book.objects.get(id=1)
条件查询
books = Book.objects.filter(pricelt=50) # 价格小于50的图书
books = Book.objects.filter(titlecontains="Django") # 标题包含Django的图书
排序
books = Book.objects.order_by("-publish_date") # 按发布日期降序

2.3 更新记录

1
2
3
4
5
6
方法1:更新单个对象
book = Book.objects.get(id=1)
book.price = 69.9
book.save()
方法2:批量更新
Book.objects.filter(author="张三").update(price=79.9)

2.4 删除记录

1
2
3
4
5
删除单个记录
book = Book.objects.get(id=1)
book.delete()
批量删除
Book.objects.filter(pricelt=30).delete()

3. 高级查询

3.1 聚合查询

1
2
3
4
5
6
from django.db.models import Avg, Max, Min, Count
计算平均价格
avg_price = Book.objects.aggregate(Avg('price'))
统计每个作者的图书数量
author_count = Book.objects.values('author').annotate(book_count=Count('id'))

3.2 F对象和Q对象

1
2
3
4
5
6
7
from django.db.models import F, Q
F对象:字段之间的比较
Book.objects.filter(salesgt=F('stock')) # 销量大于库存的图书
Q对象:复杂查询条件
Book.objects.filter(
Q(pricelt=50) | Q(author="张三") # 价格小于50或作者为张三的图书
)

4. 关联查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
定义关联模型
class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
关联查询
查询作者的所有图书
author = Author.objects.get(id=1)
books = author.book_set.all()
查询图书的作者信息
book = Book.objects.get(id=1)
author = book.author

总结

Django ORM提供了丰富的API来操作数据库,使得数据库操作变得简单直观。上面介绍的只是一些基础用法,Django ORM还有更多高级特性等待你去探索。在实际开发中,建议:

  1. 合理使用查询优化方法,如select_related()和prefetch_related()
  2. 注意查询性能,避免N+1查询问题
  3. 适当使用数据库索引
  4. 对于复杂查询,可以考虑使用原生SQL
-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道