简介
Django 操作提供了一套抽象的API ,进行数据库CRUD操作(create,retrieve,update,delete)操作,简化数据库操作
应用视图中操作数据
- 创建数据
-
导入数据库模型类
image.png - 创建数据的两种方法
- 第一种方法在调用save之前没有执行sql操作
- 第二种 直接进行执行sql
-
#创建数据(views)
# 方法一
# 创建模型类对象
# one_obj = Projects(name='这是一个牛逼的项目4',leader='icon',tester='小明1'
# ,programer='若言',publish_app='厉害的项目',desc='描述')
# # 保存
# one_obj.save()
# 方法二
Projects.objects.create(name='这是一个牛逼的项目5',leader='icon',tester='小明1'
,programer='若言',publish_app='厉害的项目',desc='描述')
return JsonResponse('完成',safe=False)
image.png
- 读取数据
# 获取数据
# 方法一获取所有数据,返回一个QuerySet查询集
# h = Projects.objects.all()
# print(h[:1])
# for i in h:
# print(i.name)
# 1获取特定某个指定的记录
'''
1.get返回的是一个模型类对象
2.get只能查询一条数据,查询结果出现多条或者不存在就会报错
3,get主要用于主键和唯一值的查询
'''
# one_Projecr = Projects.objects.get(id=3)
# 2读取部分数据 filter,exclude
"""
filter : 返回满足条件的查询集合
exclude : 返回不满足条件的查询集合
"""
# #读取id为1的数据
# qs = Projects.objects.filter(id=1)
# #读取ID不为1的数据
# qs1 = Projects.objects.exclude(id=1)
# 3模糊查询
# mh = Projects.objects.filter(leader__contains='icon') #包含icon
# mh1 = Projects.objects.filter(leader__icontains='con') #忽略查询结果的大小写icon
# mh2 = Projects.objects.filter(leader__startswith='i') #以i开头的
# mh3 = Projects.objects.filter(leader__istartswith='') # 忽略大小
# mh4 = Projects.objects.filter(leader__endswith='n') #以n结尾的
# mh5 = Projects.objects.filter(leader__iendswith='n')
# mh6 = Projects.objects.filter(leader__regex='') #正则匹配
# mh7= Projects.objects.filter(leader__iregex='')
# mh8 = Projects.objects.filter(leader__exact='icon') #精确匹配
# mh9 = Projects.objects.filter(leader__iexact='icon')
# mh10 = Projects.objects.filter(leader__in=['icon','宋茜'])#包含
# 4关联查询
'''
格式 外键字段__从表字段名__
如果是多个表 A表__C表__从表字段名_
'''
# qs = Projects.objects.filter(project2s__name__contains='创建项目')
# 5比较查询
"""
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
返回查询集
"""
# qs = Projects.objects.filter(id__gt=3)
#6逻辑查询
'''
可以组合& 和| 操作符以及使用括号进行分组来编写任意复杂的Q 对象
允许组合正常的查询和取反(NOT) 查询 '~'
'''
# qs1 =Projects.objects.filter(name='接口自动',leader='宋茜') #且的关系
# from django.db.models import Q
# qs1 = Projects.objects.filter(Q(leader='icon')|Q(leader='宋茜')) #或的关系
# qs2 = Projects.objects.filter(Q(leader='icon')&~Q(tester='魏书')) #and的
#7.查询集的操作
"""
7.1 查询集相当与一个列表,支持列表的大多数就操作(数字索引,正向切片,for循环)
7.2 查询集是对数据库的一种操作
7.3 查询及会缓存结果
7.4 惰性查询
7.5 查询集支持链式操作
first() 第一个
"""
#获取链式查询的第一个结果
qs = Projects.objects.filter(leader__contains='icon').filter(tester__contains='小明1').first()
qs = Projects.objects.filter(leader__contains='icon').filter(tester__contains='小明1').last()
- 更新数据
#更新数据
"""
1.获取要修改的数据
2.修改
3.保存
"""
# one_project = Projects.objects.get(id=2)
# one_project.name = '接口自动化项目'
# one_project.save()
- 删除数据
#删除数据
"""
1.获取要删除的模型对象
2.删除
3.保存
"""
one_project = Projects.objects.get(id=5)
one_project.delete() #调用时自动保存
- 排序
#排序操作
'''
默认是升序
降序加'-'
当地一个字段相同看第二个字段
'''
Projects.objects.filter(id__gt=3).order_by('-name','leader')
- 分组查询#####
#分组查询
# qs = Project2s.objects.all().annotate(h = Count('project_id'))
qs = Project2s.objects.values('project_id').annotate(Count('project_id'))
- 聚合查询
#聚合查询
'''
aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。键的名称是聚合值的标识符
,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。
为聚合值指定一个名称 名称 = 集合值标识符()
'''
# from django.db.models import Max,Avg,F,Q,Min,Sum
# qs = Projects.objects.all().aggregate(idmax = Max('id'),idmin=Min('id'),idavg = Avg('id'),
# idsum =Sum('id'))
F字段查询
#F查询两个字段的值做比较
"""
Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。
Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。
"""
from django.db.models import F
qs = Projects.objects.filter(leader=F('tester'))
网友评论