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) books = Book.objects.filter(titlecontains="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="张三") )
|
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还有更多高级特性等待你去探索。在实际开发中,建议:
- 合理使用查询优化方法,如select_related()和prefetch_related()
- 注意查询性能,避免N+1查询问题
- 适当使用数据库索引
- 对于复杂查询,可以考虑使用原生SQL