Django ORM总结源码(测试)

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)
    #(, 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)             #, 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!')

 

你可能感兴趣的:(Django)