
Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06
使用
发布日期:2021-05-14 13:55:07
浏览次数:18
分类:精选文章
本文共 1988 字,大约阅读时间需要 6 分钟。
Django ORM 模型层基础教程
1. 模型层概述
Django 的 ORM(对象关系映射)允许你通过 Python 代码与数据库进行交互。模型类代表数据库表,模型实例代表表中的一条记录。以下是创建一个简单模型的示例:
from django.db import modelsclass Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __str__(self): return self.name
模型类特点:
- 每个模型类代表一张数据库表
- 模型实例代表表中的一条记录
- ORM自动管理数据库操作,简化数据库编程
2. 创建对象
创建一个新对象
from blog.models import Blog# 创建一个 Blog 实例b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')# 保存到数据库b.save()
注意:save()
方法不会直接执行数据库语句,直到真正调用为止。
保存修改
b5.name = 'New name'b5.save() # 更新数据库
3. 外键字段操作
更新外键
from blog.models import Blog, Entry# 假设 `entry` 已存在于数据库cheese_blog = Blog.objects.get(name="Cheddar Talk")entry.blog = cheese_blogentry.save()
多对多字段操作
from blog.models import Author, Entry# 创建 Author 实例joe = Author.objects.create(name="joe")# 将 joe 添加到 Entry 的多对多字段中entry.authors.add(joe)
插入多个多对多字段:
john = Author.objects.create(name="John")paul = Author.objects.create(name="Paul")entry.authors.add(john, paul)
4. 数据库查询
查询所有记录
all_entries = Entry.objects.all()# all_entries 是一个 QuerySet 对象
根据条件查询
# 查询 2006 年发表的_entriesEntry.objects.filter(pub_date__year=2006)
链式查询
# 查询标题以 "What" 开头,并按日期排序的_entriesEntry.objects.filter(headline__startswith="What").order_by("pub_date")
QuerySet 的特点
- 惰性:QuerySet 不会立即执行数据库操作,只有在访问(如
print
)时才会取数据 - 独立:每次查询都会生成一个新的 QuerySet 对象
- 缓存依存:查询结果会被缓存,减少重复数据库操作
使用 .get()
查询单个对象
# 根据主键查找one_entry = Entry.objects.get(pk=1)
注意:
.get()
会抛出DoesNotExist
错误,若记录不存在.filter([0])
也可以用来查找单个对象
5. 其他 QuerySet 方法
.exclude()
:排除满足条件的记录.annotate()
:对查询结果进行分组和聚合.order_by()
:对结果进行排序.distinct()
:去重.values()
:提取特定字段的值.none()
:创建一个空的 QuerySet
6. 聚合函数
使用聚合函数(如 annotate
)可以对查询结果进行汇总统计:
# 统计每个 Blog 的评论数量from django.db.models import CountBlog.objects.annotate( num_comments=Count('entry', filter_set=Entry.objects.filter(n_comments__gte=10)).filter(tagline__contains='博客')
总结
Django 的 ORM 提供了强大的查询功能,通过 QuerySet 操作可以方便地与数据库交互。结合 .filter()
和链式调用,你可以对数据库数据进行复杂的筛选和聚合操作,从而提升开发效率。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月16日 07时40分29秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C#中文转换成拼音
2019-03-10
C++错误笔记
2019-03-10
【无线通信模块】GPRS DTU不稳定和容易掉线原因
2019-03-10
SpringBoot使用RedisTemplate简单操作Redis的五种数据类型
2019-03-10
国标流媒体服务器以ROOT身份运行提示“permission denide”报错解决
2019-03-10
qt中转到槽后如何取消信号与槽关联
2019-03-10
qt问题记录-spin box与double spin box
2019-03-10
移动端事件
2019-03-10
css 图片按比例缩放
2019-03-10
小程序form表单里面buton点击事件失效
2019-03-10
微信小程序placeholder设置自定义样式
2019-03-10
spring-day01
2019-03-10
spring的值注入与组件扫描
2019-03-10
C#跨窗体程序调用方法的具体操作
2019-03-10
C#中创建Android项目
2019-03-10
统计学之变异系数与是非标志
2019-03-10
关于继承的一些基本知识
2019-03-10
抖音发布黄金时间段,抖音上热门最佳时间
2019-03-10