1. mysql 表使用的功能有: 增 删 改 查 这几大功能, 但是mysql 和django 对接之后,使用的语法不是原生的SQL语法.
2. 增功能的实现:
User.objects.create(name='Owen', age=10, birthday='2008-08-08')
3. 查的功能 使用的是filter 关键词
# 操作的结果拥有是一个list users = User.objects.filter(name='Owen')
4. 改的功能 通过django的语句可以直接修改mysql的数据
User.objects.filter(name='Owen').update(name='Owen_best')
5. 删除的功能
User.objects.filter(name='Owen').delete()
6. 单表操作对应的函数: 很重要!!!!重视!!!
1. all():查询所有结果list,支持正向索引取值[i],支持索引切片[m:n] 2. filter(**kwargs):查询满足条件的所有结果list 3. get(**kwargs):查询满足条件的唯一对象obj,查询结果不为obj则抛出异常 4. exclude(**kwargs):查询满足条件的对立面的所有结果list 5. order_by(*field):查询按照指定字段进行排序后的所有结果list,'tag_name'代表正序,'-tag_name'代表降序 6. reverse():反转排序查询的所有结果list 7. count():统计返回查询结果list的长度 8. first():返回查询结果中的第一个对象obj 9. last():返回查询结果中的最后一个对象obj 10. exists():判断查询结果是否存在,值为布尔类型 11. values(*field):按照指定字段(们)进行查询,返回存放包含字段(们)的字典的列表list 12. values_list(*field):同values类似,返回存放数据的元组的列表list 13. distinct():从查询结果中剔除重复字段(一般和values结合使用)
7. 模糊查询案例:
user_list = User.objects.filter(id__gte=1) #案例 # 整型相关 age__exact=8 # 确切匹配8 age__in=[8, 10] # 8或10 age__gt=8 # 大于8 age__gte=8 # 大于等于8 age__lt=8 # 小于8 age__lte=8 # 小于等于8 age__range=[8, 10] # 8到10之间 age__isnull=0|1 # 0:is not null | 1:is null # 字符串相关 name__startswith # 后方模糊匹配 name__endswith # 前方模糊匹配 name__contains # 前后方均模糊匹配 name__regex # 正则匹配 name__istartswith # 不区分大小写后方模糊匹配(i开头就是不区分大小写) # 时间相关 birthday__year=2008 # 时间年份模糊匹配
8. Django特有的查询模式, F模式 查询与 Q查询模式
from django.db.models import F, Q # F基于计算 F('字段名') # 案例一:将id为1的结果年龄增加1 User.objects.filter(id=1).update(age=F('age')+1) # 案例二:查询id是年龄1/4的结果 user = User.objects.filter(id=F('age')/4) # Q基于关系 Q('字段条件') # 与 User.objects.filter(Q(id=1) & Q(age=10)) # id=1 并且 age=10 # 或 User.objects.filter(Q(id=1) | Q(id=2)) # id=1 或 id=2 # 非 User.objects.filter(~Q(id=1)) # id 不为 1
9. 单表查询案例分析使用
# 2. 查询所有的,并支持正向 的切片工作 # 支持正向所有(不支持反向索引,原因是数据过多时,不能将数据一次性查出,需要分批次按需求查出) # u5 = User.objects.all()[0] # print(u5) # 3.支持切片 # # u_l1 = User.objects.all()[1:3] # print(u_l1) # print(u_l1.query) # 4. 查询结果 出来并取反: exclude # # 2. exclude(**kwargs):查询满足条件的对立面的所有结果list # u_l2 = User.objects.exclude(id=1) # print(u_l2) # print(u_l2.query) # # 显示除了id=1 的所有成员信息 # # 5. 查询出来的列表组,并进行升序 或降序 :order_by # # # 3. order_by(*field):查询按照指定字段进行排序后的所有结果list,'tag_name'代表正序,'-tag_name'代表降序 # u_l3 = User.objects.order_by('-id') # print(u_l3) # print(u_l3.query) # #('id') 是根据id 进行升序排列 # #('-id') 是根据id 进行降序排列 # # 6.统计查询出来的列表的里面的个数: count() # # 5. count():统计返回查询结果list的长度 # count = User.objects.all().count() # print(count) # # 7. 判断查询出来的是否存在: exists() # # 6. exists():判断查询结果是否存在,值为布尔类型 # res = User.objects.filter(id=10).exists() # print(res) # # # 8. 通过指定的字段进行查询, 结果还是为列表信息: values # # 7. values(*field):按照指定字段(们)进行查询,返回存放包含字段(们)的字典的列表list # u_l5_dic = User.objects.values('name', 'age')[1:3] # # print(u_l5_dic.query) # print(u_l5_dic) # # 注意使用values 不能使用你query 优化信息 # # 9.通过指定的字段进行查询, 结果还是为列表信息: values_list 显示的是元祖形式, 可以切片得到想要的对象属性 # # 8. values_list(*field):同values类似,返回存放数据的元组的列表list # u_l6_dic = User.objects.values_list('name', 'age')[1:3] # [0][1] 第一个元组中的第二个数据,年龄 # print(u_l6_dic) # # #[1:3]是查询出来的取 1,2 元祖形式 # #[0][1] 是因为查询出来有2个结果, [0] 是取第一个结果, [1] 是取第一个结果里面的第二个属性 # # 字符串 # u_l12 = User.objects.filter(name__startswith='X') # 取开头为X # print(u_l12) # u_l13 = User.objects.filter(name__istartswith='x') # 取开头不是为x的信息, 前面有i 就是取反的意思 # print(u_l13) # u_l14 = User.objects.filter(name__endswith='hh') # print(u_l14) # u_l15 = User.objects.filter(name__icontains='g') #模糊取值 # print(u_l15) # u_l16 = User.objects.filter(name__iregex="[a-zA-Z0-9]{1,}") #正则表达式 # print(u_l16)