django orm的基础操作

django orm的基础操作(django提供的数据库操作)

字面意思:

O->Object RM->Relational (关系) Mapping(映射)

代表什么思想:

实际上就是一种把数据库映射成对象的想法
  • 数据库的表(table) --> 类(class)
  • 记录(record,行数据)–> 对象(object)
  • 字段(field)–> 对象的属性(attribute)

QuerySet
查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。

QuerySet实际上是一个object的列表

当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表):

  • all():返回所有数据。
  • filter():返回满足条件的数据。
  • exclude():返回满足条件之外的数据。
  • order_by():对结果进行排序。

ORM的基本操作1

# ORM操作
qs = models.Teacher.objects.all()  # 获取全部的teacher数据 qs-QuerySet
name = qs.values('name')  # 通过values进行字段过滤
print(name)  # --<QuerySet [{'name': '牛牛'}, {'name': '大师兄'}]>

count = qs.count()  # 获取qs的个数

firstData = qs.first()  # 获取qs的第一个数据
print(firstData)  # --Teacher object (1)

valueList = qs.values_list('name')  # 只获取数据中的Value
print(valueList)  #--<QuerySet [('牛牛',), ('大师兄',)]>

teacher = models.Teacher.objects.all().first()  # 获取第一个数据 obj
teacher = models.Teacher.objects.all()[0:2]  # 切片获取qs
name = teacher.name
print(name)  # --牛牛

ORM的基本操作2

# 执行原生的SQL
teacher = models.Teacher.objects.raw('select * from teacher;')

# filter的数据库操作
teacher = models.Teacher.objects.filter(name__contains='大')  # 过滤 模糊查询
teacher = models.Teacher.objects.filter(name__endswith='牛')  # 过滤 以什么为结尾
teacher = models.Teacher.objects.filter(name__startswith='牛')  # 过滤 以什么为开始
teacher = models.Teacher.objects.filter(name__in=['大师兄', '牛牛'])  # 过滤 在什么范围内
teacher = models.Teacher.objects.filter(name__isnull=True)  # 过滤 为空
teacher = models.Teacher.objects.filter(id__gt=1)  # 过滤 大于
teacher = models.Teacher.objects.filter(id__gte=1)  # 过滤 大于等于
teacher = models.Teacher.objects.filter(id__lt=1)  # 过滤 小于
teacher = models.Teacher.objects.filter(id__lte=1)  # 过滤 小于等于
teacher = models.Teacher.objects.filter(id__range=[1, 4])  # 过滤 在1到4之间 between and

teacher = models.Teacher.objects.exclude(id__gt=2)  # 排除 id 大于2的 其他用法和filter相同

多条件查询

# 多条件查询
# ADN 操作
teacher = models.Teacher.objects.filter(name='大师兄', id=2)  # 过滤 filter中都是and操作。
# OR 操作
# 通过django中提供的Q来实现负责的过滤
# 导入 from django.db.models import Q

teacher = models.Teacher.objects.filter(Q(name='大师兄') & Q(id=2))  # & 相当于sql中的and
teacher = models.Teacher.objects.filter(Q(name='大师兄') | Q(id=2))  # | 相当于sql中的 or
# 在Q前面可以通过~取反,代表name!=大师兄 and id=1
teacher = models.Teacher.objects.filter(~Q(name='大师兄') & Q(id=1))
# 使用Q之外 还可以使用关键字参数,再次进行过滤,Q必须写在关键字参数的前面
teacher = models.Teacher.objects.filter(~Q(name='大师兄') | Q(id=1), name__contains='牛')
上一篇:Django   MVC


下一篇:laravel orm