Object Relational Mapping(关系对象映射),简称为 ORM;对于 Django 框架,指的是Django通过内部的处理函数,实现了多种数据库统一的访问方法,从而可以非常方便地实现软件系统的开发,无须针对不同的数据库进行 SQL 语句的编写;对于非职业开发人员而言,这是一种非常大的优势。
在开发中小型网站时,使用 Django 确实能够带来了很多的方便。
Django orm 用法概述
在 ORM 中,查询是更新、删除的基础,查询到相应的QuerySet对象后,可以执行特定字段的设值或者删除操作,如下:
项目 | 示例 | 备注 |
---|---|---|
查询 | test1 = Test.objects.get(id=1) | 数据表名=TEST,字段名= id |
更新 | test1.name = ‘Google’ test1.save() |
name 为`字段名 |
删除 | test1.delete() |
Django 的 filter、exclude
Django的查询方法有很多,基本公式是 数据库名
.object.ORM访问方法
(字段名
__字段控制参数
=查询条件
) 。
除了 get
方法外,最常见的就是 all
、filter
、exclude
方法了。这里做了表格化的总结:
all 方法
公式 备注 数据表名
.objects.all()查询所有 数据表名
.objects.all()[:10]切片 (前10条) 数据表名
.objects.all().reverse()[:2]反向切片 (最后两条) 数据表名
.objects.all().reverse()[0]最后一条 filter 方法
公式 备注 数据表名
.objects.filter(字段名
=”查询内容
“)数据表名
.objects.filter(字段名
=”查询内容
“)数据表名
.objects.filter(字段名
__exact=”查询内容
“)数据表名
.objects.filter(字段名
__iexact=”查询内容
“)精确查询( i
开头,表示不区分大小写,下同)数据表名
.objects.filter(字段名
__contains=”查询内容
“)数据表名
.objects.filter(字段名
__icontains=”查询内容
“)包含文本 数据表名
.objects.filter(字段名
__in=[“查询1
“, “查询2
“,…
, “查询n
“ ])范围检索(任1) 数据表名
.objects.filter(字段名
__range=(最小值
,最大值
))数字区域检索
__range=(‘2005-01-01 00:00:00’, ‘2005-03-31 00:00:00’)数据表名
.objects.filter(字段名
__gt=查询数字
)数据表名
.objects.filter(字段名
__gte=查询数字
)数据表名
.objects.filter(字段名
__lt=查询数字
)数据表名
.objects.filter(字段名
__lte=查询数字
)数值比较(支持与日期/时间参数串接) 数据表名
.objects.filter(字段名
__date=’YYYY-mm-dd
‘)数据表名
.objects.filter(字段名
__year=年份数字
)数据表名
.objects.filter(字段名
__iso_year=年份数字
)数据表名
.objects.filter(字段名
__month=月份数值
)数据表名
.objects.filter(字段名
__day=日数值
)数据表名
.objects.filter(字段名
__week=周数
)
数据表名
.objects.filter(字段名
__week_day=星期几数
) # 星期日=1数据表名
.objects.filter(字段名
__iso_week_day=星期几数
) # 星期一=1数据表名
.objects.filter(字段名
__quarter=季节数
) # 新历数据表名
.objects.filter(字段名
__time=”HH:MM
“)数据表名
.objects.filter(字段名
__hour=小时数
)数据表名
.objects.filter(字段名
__minute=分钟数
)数据表名
.objects.filter(字段名
__second=秒数
)数据表名
.objects.filter(字段名
__date=’2022-01-00’)数据表名
.objects.filter(字段名
__year=2022)数据表名
.objects.filter(字段名
__iso_year=2022)数据表名
.objects.filter(字段名
__month=2)数据表名
.objects.filter(字段名
__day=10)数据表名
.objects.filter(字段名
__week=52)数据表名
.objects.filter(字段名
__week_day=1)数据表名
.objects.filter(字段名
__iso_week_day=1)数据表名
.objects.filter(字段名
__quarter=2)数据表名
.objects.filter(字段名
__time=datetime.time(14, 30))数据表名
.objects.filter(字段名
__hour=22)数据表名
.objects.filter(字段名
__minute=59)数据表名
.objects.filter(字段名
__second=59)数据表名
.objects.filter(字段名
__startswith=”查询内容
“)数据表名
.objects.filter(字段名
__istartswith=”查询内容
“)数据表名
.objects.filter(字段名
__endswith=”查询内容
“)数据表名
.objects.filter(字段名
__iendswith=”查询内容
“)匹配开头/结尾检索 数据表名
.objects.filter(字段名
__regex=”查询内容
“)数据表名
.objects.filter(字段名
__iregex=”查询内容
“)正则表达式查询 数据表名
.objects.filter(字段名
__isnull=布尔值
)数据 null
检索exclude方法
exclude 的用法和 filter 基本相同,此处省略。
Django的链式查询
两种参数形成链式查询
公式 备注 数据表名
.objects.filter(字段名
__year__gte=年份数字
)日期时间查询支持串接比较参数 两种方法形成链式查询
公式 备注 数据表名
.objects.filter(字段1
__contains=”查询1
“).exclude(字段2
=”查询2
“)链式查询(支持多个 filter/exclude串接)
参考文献
- 涂伟忠.Django QuerySet API[EB/OL].https://code.ziqiangxuetang.com/django, 2022/02/12.
- 涂伟忠.Django QuerySet 进阶[EB/OL].https://code.ziqiangxuetang.com/django, 2022/02/12.
- 菜鸟教程.Django 模型[EB/OL].https://www.runoob.com/django/django-model.html, 2022/02/12.
- Django Software Foundation.QuerySet API reference[EB/OL].https://docs.djangoproject.com/en/dev/ref/models/querysets/, 2022/02/12.
- Django Software Foundation.Model field reference[EB/OL].https://docs.djangoproject.com/en/2.2/ref/models/fields/, 2022/02/12.
最后更新: 2022/02/12 12:44:10
编者: David Faraday
主用链接: https://faradays-studio.gitee.io/202202121135/
备用链接: https://faradays-studio.github.io/202202121135/
引用、演绎等请注明出处,共创和谐社会,谢谢你的合作!