django orm增删改查操作

1. 基本操作

1.1 创建对象

可以通过 Django ORM 来创建数据库中的记录。

示例:

python 复制代码
# 方法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 管理器进行查询。

查询所有记录:

python 复制代码
people = Person.objects.all()  # 返回所有记录的 QuerySet

根据条件查询:

python 复制代码
# 查找name为'Alice'的记录
person = Person.objects.get(name='Alice')

# 过滤出age大于30的所有人
older_people = Person.objects.filter(age__gt=30)

查询结果排序:

python 复制代码
# 按年龄升序排序
people = Person.objects.all().order_by('age')
1.3 更新数据

方式1:

python 复制代码
person = Person.objects.get(name='Alice')
person.age = 31  # 修改属性
person.save()  # 保存修改

方式2(批量更新):

python 复制代码
Person.objects.filter(name='Bob').update(age=26)
1.4 删除数据

单个删除:

python 复制代码
person = Person.objects.get(name='Alice')
person.delete()

批量删除:

python 复制代码
Person.objects.filter(age__lt=20).delete()  # 删除所有年龄小于20的人

2. 进阶操作

2.1 关联查询(外键、ManyToMany)

Django ORM 支持表与表之间的关联关系,如 ForeignKey(外键)和 ManyToManyField(多对多)。

示例:定义外键关联

python 复制代码
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 可以轻松进行关联查询:

python 复制代码
# 查找属于某个组的所有人
group = Group.objects.get(name='Developers')
people_in_group = group.person_set.all()  # 获取关联的所有 Person 对象
2.2 事务支持

Django ORM 支持事务管理,保证多个数据库操作的原子性。

示例:

python 复制代码
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 支持聚合查询,例如求和、平均值、最大值等。

示例:

python 复制代码
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_relatedprefetch_related,用于减少多次数据库访问。

示例:

python 复制代码
# 使用 select_related 进行外键优化查询
people = Person.objects.select_related('group').all()
相关推荐
2301_77171721几秒前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
老前端的功夫18 分钟前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
小江的记录本21 分钟前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi26 分钟前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
yaoxin5211231 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
dFObBIMmai1 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw01 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
小白学大数据1 小时前
Python 自动化爬取网易云音乐歌手歌词实战教程
爬虫·python·okhttp·自动化
czlczl200209251 小时前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql
ACP广源盛139246256732 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑