Django ORM操作数据库的详细方法有哪些?
- 行业动态
- 2025-01-27
- 3183
Django 的 ORM(Object-Relational Mapping,对象关系映射)是一种强大的工具,它允许开发者使用 Python 代码来操作数据库,而无需编写复杂的 SQL 语句,以下是 Django 基于 ORM 操作数据库的方法详解:


一、模型定义
在 Django 中,模型是对数据库表的一种高级抽象,通过定义一个模型,可以明确地指定数据库的结构,包括数据表的名称、字段的名称和类型,以及可能的索引等。
from django.db import models class Blog(models.Model): title = models.CharField(max_length=200) content = models.TextField() pub_date = models.DateTimeField(auto_now_add=True)
在这个例子中,我们定义了一个名为Blog
的模型,它有三个字段:title
、content
和pub_date
,每个字段都对应一种数据库的列类型:CharField
对应字符类型,TextField
对应文本类型,DateTimeField
对应日期时间类型。
二、查询操作
1、查询所有记录:使用all()
方法可以查询所有记录。

blogs = Blog.objects.all()
2、根据条件查询:使用filter()
方法可以根据条件查询记录,查询所有标题包含 "Django" 的博客:
blogs = Blog.objects.filter(title__contains='Django')
3、获取单条记录:使用get()
方法可以获取单条记录,根据 ID 获取博客:
blog = Blog.objects.get(id=1)
4、排序查询:使用order_by()
方法可以对查询结果进行排序,按发布时间降序排序:
blogs = Blog.objects.order_by('-pub_date')
5、限制查询结果数量:使用[:n]
语法可以限制查询结果的数量,获取前两条记录:
blogs = Blog.objects.all()[:2]
6、聚合查询:使用aggregate()
方法可以进行聚合查询,统计博客的数量:
from django.db.models import Count blog_count = Blog.objects.aggregate(Count('id'))
三、创建记录
在 Django ORM 中,可以通过创建模型的实例来创建新的记录,以下是一个创建新的 Blog 记录的示例:
from myapp.models import Blog 创建新的Blog实例 blog = Blog(title='My first blog', content='This is my first blog post.') blog.save() # don't forget to call save method
四、更新记录
要更新记录,首先需要获取要更新的记录,然后修改其字段值,并调用save()
方法保存更改。
获取要更新的博客 blog = Blog.objects.get(id=1) 更新博客的标题和内容 blog.title = 'Updated title' blog.content = 'Updated content' 保存更改 blog.save()
五、删除记录
要删除记录,可以使用delete()
方法。
获取要删除的博客 blog = Blog.objects.get(id=1) 删除博客 blog.delete()
六、关联关系查询
Django 的模型还可以定义复杂的关联关系,包括一对一(OneToOne)、一对多(ForeignKey)和多对多(ManyToMany)关系,我们可以定义一个 Author 模型,并将其与 Blog 模型关联:
class Author(models.Model): name = models.CharField(max_length=100) class Blog(models.Model): title = models.CharField(max_length=200) content = models.TextField() pub_date = models.DateTimeField(auto_now_add=True) author = models.ForeignKey(Author, on_delete=models.CASCADE)
这里我们为 Blog 模型添加了一个 author 字段,它是一个外键字段(ForeignKey),指向 Author 模型,这意味着每篇博客都有一个作者,而每个作者可以写多篇博客,当我们删除一个作者时,on_delete=models.CASCADE 参数将确保所有关联的博客也会被删除。
七、FAQs
1、问:如何在 Django ORM 中实现多表联合查询?
答:在 Django ORM 中,可以通过select_related()
或prefetch_related()
方法实现多表联合查询。select_related()
用于一对一或一对多的外键关系,它会执行 SQL JOIN 操作;而prefetch_related()
则用于多对多的关系,它会先分别查询两张表的数据,然后在 Python 层面进行合并。
2、问:如何在 Django ORM 中优化查询性能?
答:在 Django ORM 中优化查询性能的方法有多种,包括但不限于:使用select_related()
或prefetch_related()
减少数据库查询次数;合理使用索引加快查询速度;避免在循环中进行数据库查询;使用defer()
延迟加载不需要的字段等,还可以通过分析查询计划(EXPLAIN)来找出性能瓶颈并进行针对性优化。