from django.shortcuts import render
from django.shortcuts import HttpResponse
from usermange.models import UserInfo
# Create your views here.
def test(request):
# 方法一:
UserInfo(uname='gaofei',uage=11).save()
# 方法二
userobj = UserInfo()
userobj.uname = 'zhang3'
userobj.uage = 22
userobj.save()
# 方法三
UserInfo.objects.create(uname='li4',uage=23)
#方法四
userobj1 = UserInfo.objects.get_or_create(uname='wang5', uage=24)
print(userobj1)
#(<UserInfo: UserInfo object (4)>, True) #第一次保存数据
# (< UserInfo: UserInfo object (4) >, False) #第二次保存数据,结果为False
# 方法五:推荐使用
dicts = {'uname':'gaofeifeifei','uage':'22'}
UserInfo(**dicts).save()
#===数据的修改
#批量更新:谨慎使用,如果数据量小最好用单个跟新
UserInfo.objects.filter(id=7).update(uname='gaofeifei')
# 单个更新,自动时间的跟新只支持单个跟新不支持批量跟新
userobj2 = UserInfo.objects.filter(id=7)[0]
userobj2.uname = 'gaofei'
userobj2.save()
#跟新或者创建
userobj3 = UserInfo.objects.update_or_create(uname='li4',uage=23) #和get_or__create类似,没有创建,有跟新
print(userobj3) #<UserInfo: UserInfo object (3)>, False) #已经存在
# 数据的删除
#批量删除
UserInfo.objects.filter(uname='gaofeifei').delete() #删除满足条件的
UserInfo.objects.all().delete() #删除所有
#单个删除
userobj5 = UserInfo.objects.get(id = 8)
userobj5.delete() #虽然是两句话,但是执行的是一个sql语句
# 执行的sql语句为:
# DELETE FROM `usermange_userinfo` WHERE `usermange_userinfo`.`id` IN(8)
# ===数据的查询
# 1、---查询所有数据的方法
datas1 = UserInfo.objects.all() #返回类型QquerySet,内部是所有对象的集合
datas2 = UserInfo.objects.values() #返回列表类型,是对象对应字典为元素的列表
print(type(datas1),'==>',datas1)
print(type(datas2),'==>',datas2)
# ----注意,对于返回值类型为QuerySet类型的数据,可以使用切片进行截取数据
print(datas1[2]) #获取下表索引为2的数据对象 使用了sql
print(datas1[1:3]) #获取下表1到3(取左不取右)的对象集合,类型为QuerySets 使用了python内部的排序
print(datas1[1:3:-1]) #倒序输出对象列表 使用了python的倒叙排列
# 2 按照条件查询数据
# --filter
datas3 = UserInfo.objects.filter(uname='li4', uage=23) #获取同时满足参数的数据QuerySet集合
#链式查找
UserInfo.objects.filter(uname__contains='li') #模糊查询
UserInfo.objects.filter(uname__icontains='li') #忽略大小写模糊查询
UserInfo.objects.filter(uname__regex= 'li4$') #正则匹配
UserInfo.objects.filter(uname__iregex= 'li4$') #忽略大小写正则匹配
UserInfo.objects.filter(uname__exact='li4') #全匹配
UserInfo.objects.filter(uname__iexact='li4') #忽略大小写全匹配
UserInfo.objects.filter(uname__startswith='l') #以。。。开头
UserInfo.objects.filter(uname__istartswith='l') #忽略大小写,以。。。开头
UserInfo.objects.filter(uname__endswith='l') #以。。。结束
UserInfo.objects.filter(uname__iendswith='l') #忽略大小写,以。。。结束
UserInfo.objects.filter(uname__in=('i','li4')) #值是否在这个集合中,参数可以是列表,元组,集合
UserInfo.objects.filter(uage__lt=5) # 小于-------------------以下适用数字类型
UserInfo.objects.filter(uage__lte=5) #小于等于
UserInfo.objects.filter(uage__gt=5) #大于
UserInfo.objects.filter(uage__gte=5) #大于等于
UserInfo.objects.filter(uage__range=(11,12)) #在11-12范围内,包含11和12
UserInfo.objects.filter(ucdate__year=2018) #年份是否为2018-----------以下适用日期类型
UserInfo.objects.filter(ucdate__month=12) #月份为12
UserInfo.objects.filter(ucdate__day=10) #日期为10
print(UserInfo.objects.filter(ucdate__week_day= 1) ) #星期一 #the day of week from 1 (Sunday) to 7 (Saturday)
print()
UserInfo.objects.filter(ucdate__hour=12) #12点
UserInfo.objects.filter(ucdate__minute=20) #20分
UserInfo.objects.filter(ucdate__second=10) #10秒
#--get
datas4 = UserInfo.objects.get(id = 6) #获取同时满足参数的对象,如果查询结果为空或者有多条数据,报错
dataobj1 = UserInfo.objects.first() #返回第一个对象
dataobj2 = UserInfo.objects.last() #返回最后一个对象
#--exclude
datas5 = UserInfo.objects.exclude(uname='li4') #获取不满足条件的数据QuerySet集合\
#reverse()
datas6 = UserInfo.objects.all().reverse() #获取反转后的结果集,类型为QuerySet,可以进行多次的reverse()
#distinct()
# datas7 = UserInfo.objects.values('uname','id').distinct() #根据uname,id进行去重,返回去重后的QuerySet集合,内部为字典为元素的列表
# print(datas7)
#
# #order_by()
datas8 = UserInfo.objects.all().order_by('id') #根据id进行升序排序 返回结果为QuerySet,对象集合
datas8 = UserInfo.objects.all().order_by('-id') #根据id进行降序配许
#count()
data9 = UserInfo.objects.all().count() # 统计结果数量 #通过sql语句
data9 = UserInfo.objects.values().count()
data9 = UserInfo.objects.count()
#exists()
datas10 = UserInfo.objects.all().exists() #是否查询到数据,这个还是通过sql查询所有数据,如果返回有值为True,否则为False
datas10 = UserInfo.objects.values().exists()
datas10 = UserInfo.objects.filter(id=6).exists()
#values_lists()
datas11 = UserInfo.objects.values_list() #返回的结果集(QuerySet内部为结果元组为元素组成的列表)
print(type(datas4),'==>',datas4)
return HttpResponse('Success!')