Django之模型层,单,多表操作(二)
一:单表操作之增,删,改
1.1:增
方式一:
book_obj=Book.objects.create(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
方式二:
book_obj=Book(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
book_obj.save()
1.2:改
Book.objects.filter(title__startswith="py").update(price=120)
此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录update()方法会返回一个整型数值,表示受影响的记录条数。
1.3:删
方式一:
Entry.objects.filter(pub_date__year=2005).delete()
方式二:
b = Blog.objects.get(pk=1)
# This will delete the Blog and all of its Entry objects.
b.
delete
()
二:单表查询
from django.shortcuts import render,redirect,HttpResponse from app01.models import * # Create your views here. def single_table(request): #创建表记录 # student1 =student(name='djp',age=22,birthday='2018-10-10',flag=True,salary=48888.88) # student1.save() # 查询 与 QUERYset # 1查询全部 stu=student.objects.all() # 返回QuerySet[object,object2] print(stu) # 2:first ,last #返回object对象 stu=student.objects.first() #返回object对象 stu=student.objects.last() #3:filter 和get 和 exclude stu=student.objects.filter(name='yjp') #返回Queryset[object1,object2] print(stu) stu = student.objects.exclude(name='yjp') # 调用Queryset与条件不匹配 返回Queryset[object1,object2] print(stu) stu=student.objects.get(name='yjp') #返回一个object 用get 有且只能查询到唯一的数据 print(stu) #4:exists 和 count 调用均为 Queryset stu=student.objects.all().count() print(stu) stu=student.objects.all().exists()#判断查询数据是否存在,返回boolean stu=student.objects.filter(name='xxx').exists() print(stu) #5:order_by 和 reverse 排序 返回Queryset stu =student.objects.all().order_by('salary').reverse() print(stu) #6:values 和 values_list 调用者queryset stu =student.objects.all().order_by('salary').reverse().values('name')# 返回queryset print(stu) stu =student.objects.all().values('name','salary')#返回Queryset字典 [{},{}]也可以进行 first last 操作 print(stu)#QuerySet [{'name': 'yjp', 'salary': Decimal('8888.88')}, {'name': '***', 'salary': Decimal('48888.88')}] stu=student.objects.all().values_list('name','salary')#返回Queryset [(),()] print(stu)#[('yjp', Decimal('8888.88')), ('***', Decimal('48888.88'))]> #7:distinct()去除重复记录 调用者quertset stu=student.objects.all().values('salary').distinct() print(stu) #8:基于双下划线的模糊查询 # gt,lt 返回Queryset stu=student.objects.filter(salary__gt=9999) print(stu) # #注意 student.objects.==student.objects.all() stu =student.objects.all().filter(salary__lt=9999) print(stu) #in 存在 range 之间 contains 包含 icontains 不包含 year 年 startswith 以xx开头 stu=student.objects.filter(salary__range=[1000,10000]) print(stu)#返回Que ryset stu=student.objects.filter(salary__in=[1000,10000]) print(stu)#返回Queryset stu=student.objects.filter(birthday__year='2018') print(stu) #返回Queryset #9;update 和 delect 调用者Queryset 返回 被修改记录的条数 # stu=student.objects.filter(name='djp').update(salary=7777.77)#返货 # print(stu) # stu =student.objects.filter(name='djp').delete() # print(stu) t =Teacher.objects.all() print(t) return HttpResponse('OK')
三:基于双下划线的模糊查询
Book.objects.filter(price__in=[100,200,300]) # 存在
Book.objects.filter(price__gt=100) # 大于
Book.objects.filter(price__lt=100) # 小于
Book.objects.filter(price__range=[100,200]) # 之间
Book.objects.filter(title__contains="python") # 是否是 返回boolean
Book.objects.filter(title__icontains="python")# 是否不是 返回boolean
Book.objects.filter(title__startswith="py") # 以xx开头
Book.objects.filter(pub_date__year=2012) # 日期的年是否是 2012