zoukankan      html  css  js  c++  java
  • Django之模型层-单表操作

    单表操作

    添加记录

    方式1

    # 先实例化models中的对象,按照定义的语句规则传入参数,然后使用对象调用save()保存到数据库
    book_obj = Book(id=1,title='python',price=99.9,pub_date='2018-12-9',publish='人民币出版社')
    book_obj.save()
    

    方式2 create是有返回值的,返回值是当前生成的记录,使用.可以进行调用

    # 不需要使用save()进行保存,自动保存
    
    book_obj = Book.objects.create(title='liunx',price=22.9,pub_date='2018-12-9',publish='人民币出版社')
    print(book_obj.title)
    print(book_obj.pub_date)
    

    单表查询API

    all():查询所有,返回值是QuerySet,支持for循环以及切片操作

    book_list = Book.objects.all()
    for i in book_list:
        print(i.title)
    

    first(),last():第一个和最后一个。调用者是Query对象,返回的是一个模型对象

    book = Book.objects.all().first()
    

    filter() 过滤,对应sql语句的where。调用者是objects,返回值是QuerySet。可以多个查询条件,传入参数的时候以, 隔开

    book = Book.objects.filter(id=1)
    print(book[0].title)
    

    get()与filter方法类似,有且只有一个查询结果时才有意义,假如说查询结果是多个对象会保存或者没有查询到结果时也会保存,调用者是objects,返回值是一个model对象

    book = Book.objects.get(id=1)
    print(book.title)
    

    exclude()排除,与filter相反。调用者是objects,返回值是QuerySet。

    # 除了python等于python的都找出来
    book = Book.objects.exclude(title='python')
    print(book[1].title)
    

    order_by()排序,调用者是QuerySet,返回值是QuerySet,默认是升序,在字段前加上 - 是倒叙。可以传入多个排序字段,如果第一个相等的情况下,会对第二个参数进行判断排序。

    book = Book.objects.all().order_by('id')
    # book = Book.objects.all().order_by('-id') 倒叙排序
    print(book)
    

    reverse():对查询结果反向排序,调用者是QuerySet

    count():调用者是QuerySet,返回值是数字类型

    book = Book.objects.all().count()
    print(book)
    

    exists():判断QuerySet是否有值,调用者这是QuerySet,返回值是bool

    book = Book.objects.all().exists()
    print(book)# True
    

    values()内部去循环一个QuerySet,返回一个QuerySet,返回值是一个列表嵌套字典,键是传入values的值,值是查询出来的值

    values()内部实现原理

    def values(val):
        tmp = []
        for obj in Book.objects.all():
            tmp.append({
                'id':obj.id
            })
        return tmp
    values('id')
    

    values()的调用者可以是一个QuerySet也可以是一个objects

    book = Book.objects.all().values('id','price')
    # <QuerySet [{'id': 1, 'price': Decimal('99.90')}, {'id': 2, 'price': Decimal('22.90')}, {'id': 3, 'price': Decimal('2000.90')}]>
    print(book)
    # book = Book.objects.values('id','price')
    

    values_list():调用者是QuerySet对象,返回值是QuerySet(一个列表中嵌套查询出来的值放在元组内)

    book = Book.objects.all().values_list('id')
    print(book) 
    # <QuerySet [('python',), ('liunx',), ('射雕英雄传',)]>
    

    distinct():从返回结果中剔除重复的记录。调用者是QuerySet,返回值是QuerySet。all()后面调用distinct()是没有意义的,可以用在固定查询某个字段的时候使用

    book = Book.objects.all().values('price').distinct()
    print(book)
    

    单表查询之模糊查询

    # 大于:__gt 
    ret = Book.objects.filter(price__gt=10)
    
    # 小于:__lt 
    ret = Book.objects.filter(price__lt=10)
    
    # 以什么什么开头:__startswith
    ret = Book.object.filter(price__startswith)
    
    # 只要有什么就查询出来__contains
    ret = Book.objects.filter(title__contains='h')
    
    # 与上面类似,不区分大小写:__icontains
    ret = Book.objects.filter(title__icontains='h')
    
    # 只要在字段在列表内:__in
    ret = Book.objects.filter(title__in=['python','liunx'])
    
    # 在某某之间:__range
    ret = Book.objects.filter(price_range=[1,200])
    
    # 查询年月日:__year,__month,__day(必须是Date才能调用)
    ret = Book.objects.filter(pub_date__year=2018)
    
    

    单表操作之修改与删除

    先查询出需要进行删除修改的数据,然后调用相应的方法

    删除:delete()调用者是QuerySet对象与model对象返回值是删除的记录数量

    book = Book.objects.filter(title='liunx').delete()
    

    修改:update()调用者必须是QuerySet

  • 相关阅读:
    逻辑分支
    iOS开发——NSArray中的字符串排序
    iOS开发——实时监控网速(仅作参考,发现一点问题)
    iOS10适配——相机,通讯录,麦克风等权限设置
    iOS10适配——Push Notifications
    iOS开发——获取当前屏幕显示的viewcontroller
    iOS开发——应用图标上显示消息数量
    iOS开发——获取手机当前WiFi名和MAC地址
    我是一个线程(写的太好了,忍不住转过来)
    iOS开发——WAVE音频文件解析
  • 原文地址:https://www.cnblogs.com/wualin/p/10115349.html
Copyright © 2011-2022 走看看