• Python-Django 模型层-单表查询


    单表操作

    -增加,删,改:两种方式:queryset对象的方法,book对象的方法
    -改:需要用save()
    -get()方法:查询的数据有且只有一条,如果多,少,都抛异常


    单表查询

    -<1> all(): 查询所有结果
    <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
    <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
    <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
    <5> order_by(*field): 对查询结果排序('-id')
    <6> reverse(): 对查询结果反向排序
    <8> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
    <9> first(): 返回第一条记录
    <10> last(): 返回最后一条记录
    <11> exists(): 如果QuerySet包含数据,就返回True,否则返回False
    <12> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
    <13> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
    <14> distinct(): 从返回结果中剔除重复纪录


    单表基于双下划线的模糊查询

    Book.objects.filter(price__in=[100,200,300])
    Book.objects.filter(price__gt100)
    Book.objects.filter(price__lt=100)
    Book.objects.filter(price__gte=100)
    Book.objects.filter(price__lte=100)
    Book.objects.filter(price__range=[100,200])
    Book.objects.filter(title__contains="python")
    Book.objects.filter(title__icontains="python")
    Book.objects.filter(title__startswith="py")
    Book.objects.filter(pub_date__year=2012)

    1 xx 12.3
    2 xx 12.3
    3 xxx 12.3

      
      import os
      if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day81.settings")
    import django
    django.setup()
    from app01 import models

      # 单表的增加两种 # date类型,传的时候,可以传字符串(格式必须是:2018-06-17),可以传时间对象 # ret=models.Book.objects.create(name='洪流吗',price=23.7,publish='北京出版社',pub_data='2018-06-17') # import datetime # ctime=datetime.datetime.now() # ret=models.Book.objects.create(name='西游记',price=45.9,publish='南京出版社',pub_data=ctime) # 生成对象,再调save方法 # book=models.Book(name='三国演义',price=46.89,publish='南京出版社',pub_data='2017-08-17') # book.save() # 删除(pk代指主键) # ret=models.Book.objects.filter(pk=1).delete() # book=models.Book.objects.filter(pk=1).first() # book.delete() #更新 # ret = models.Book.objects.filter(pk=2).update(name='ddd') # book=models.Book.objects.filter(pk=2).first() # book.name='XXX' # # 没有update这个方法的 # # book.update() # # 既可以保存,又可以更新 # book.save() # get方法 # book = models.Book.objects.filter(pk=2).first() # book拿到的是 book对象 # get查到的数据有且只有一条 # book=models.Book.objects.get(name='XXX') # book=models.Book.objects.get(name='三国演义') # print(book.name) # 查询的api(方法) # exclude(并列条件必须同时满足,也就是and) # book=models.Book.objects.exclude(name='三国演义',price=44) # # 必须是queryset对象才有query,它就是原生的sql # print(book.query) # 如何定义一个支持链式操作的类(每个方法返回的时候,返回对象本身) # 按价格升序排列 # book=models.Book.objects.all().order_by('price') # 倒序排列 # book = models.Book.objects.all().order_by('-price') # print(book.query) # # 必须有排序规则(在order_by之后用)才能调用reverse方法 # book = models.Book.objects.all().order_by('price').reverse() # book = models.Book.objects.all().reverse() # print(book.query) # book=models.Book.objects.all().filter(name='偶露菲').count() # book=models.Book.objects.all().count() # book=models.Book.objects.all().first() # print(book) # book=models.Book.objects.all().last() # queryset 可以按索引取值,但是不支持负索引 # 可以支持切片,其实sql就改了 # book = models.Book.objects.all()[10:15] # book=models.Book.objects.all().filter(name='xx').exists() # values :返回结果是queryset对象,里面套字典 # book=models.Book.objects.all().values('name') # for i in book: # print(i.get('name')) # print(i['price']) # values :返回结果是queryset对象,里面套元组 # book=models.Book.objects.all().values_list('name','price') # book=models.Book.objects.all().values('price').distinct() # 基于双下划线的模糊查询 # 在列表范围内 # book=models.Book.objects.filter(price__in=[44,45]) # print(book.query) # 大于 # book = models.Book.objects.filter(price__gt=44) # 大于等于 # book = models.Book.objects.filter(price__gte=44) # 小于 # book = models.Book.objects.filter(price__lt=44) # print(book) # # 小于等于 # book = models.Book.objects.filter(price__lte=45) # 在40--50之间 # book=models.Book.objects.filter(price__range=[40,50]) # print(book.query) # 包含 python # book = models.Book.objects.filter(name__contains='python') # 不区分大小写的包含 # book = models.Book.objects.filter(name__icontains='python') # print(book.query) # 以XX开通 # book=models.Book.objects.filter(name__istartswith='X') # print(book.query) # print(book) # book=models.Book.objects.filter(name__endswith='义') # print(book.query) # book=models.Book.objects.filter(pub_data__year='2017') # book=models.Book.objects.filter(pub_data__month='01') # book=models.Book.objects.filter(pub_data__day='11') book=models.Book.objects.filter(pub_data__year='2017',pub_data__month='08') print(book.query) print(book)

      TTL

    单表操作
    -单表的增删改
    -单表查询:
    -基于双下划线的模糊查询

  • 相关阅读:
    简单的三级联动练习
    JavaScript中定时器的暂停和继续
    关于ajax网络请求的封装
    关于JS历史
    KVC中setValuesForKeysWithDictionary:
    collectionView 中cell间距设置建议
    iOS中你必须了解的多线程
    iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见
    Touch
    Filemanager 的使用
  • 原文地址:https://www.cnblogs.com/du-jun/p/10256149.html
Copyright © 2020-2023  润新知