django orm增删改查操作
1. 基本操作
1.1 创建对象
可以通过 Django ORM 来创建数据库中的记录。
示例:
# 方法1:先创建对象,再保存
person = Person(name='Alice', age=30, email='alice@example.com')
person.save()
# 方法2:直接创建
person = Person.objects.create(name='Bob', age=25, email='bob@example.com')
1.2 查询数据
ORM 提供了丰富的查询接口,通过模型类的 objects
管理器进行查询。
查询所有记录:
people = Person.objects.all() # 返回所有记录的 QuerySet
根据条件查询:
# 查找name为'Alice'的记录
person = Person.objects.get(name='Alice')
# 过滤出age大于30的所有人
older_people = Person.objects.filter(age__gt=30)
查询结果排序:
# 按年龄升序排序
people = Person.objects.all().order_by('age')
1.3 更新数据
方式1:
person = Person.objects.get(name='Alice')
person.age = 31 # 修改属性
person.save() # 保存修改
方式2(批量更新):
Person.objects.filter(name='Bob').update(age=26)
1.4 删除数据
单个删除:
person = Person.objects.get(name='Alice')
person.delete()
批量删除:
Person.objects.filter(age__lt=20).delete() # 删除所有年龄小于20的人
2. 进阶操作
2.1 关联查询(外键、ManyToMany)
Django ORM 支持表与表之间的关联关系,如 ForeignKey
(外键)和 ManyToManyField
(多对多)。
示例:定义外键关联
class Group(models.Model):
name = models.CharField(max_length=100)
class Person(models.Model):
name = models.CharField(max_length=100)
group = models.ForeignKey(Group, on_delete=models.CASCADE) # 外键关联
通过 ORM 可以轻松进行关联查询:
# 查找属于某个组的所有人
group = Group.objects.get(name='Developers')
people_in_group = group.person_set.all() # 获取关联的所有 Person 对象
2.2 事务支持
Django ORM 支持事务管理,保证多个数据库操作的原子性。
示例:
from django.db import transaction
with transaction.atomic():
person1 = Person.objects.create(name='Charlie', age=22)
person2 = Person.objects.create(name='Dave', age=28)
# 如果其中一个操作失败,另一个也会回滚
2.3 聚合查询
Django ORM 支持聚合查询,例如求和、平均值、最大值等。
示例:
from django.db.models import Avg, Max
# 计算所有人的平均年龄
average_age = Person.objects.all().aggregate(Avg('age'))
# 查找最大年龄
max_age = Person.objects.all().aggregate(Max('age'))
3. 查询优化(具体见“查询优化总结”)
Django ORM 提供了优化查询的方法,比如 select_related
和 prefetch_related
,用于减少多次数据库访问。
示例:
# 使用 select_related 进行外键优化查询
people = Person.objects.select_related('group').all()