Django边学边记—模型增删改查

 

增删改: 

增:

book = BookInfo() book.save() 和BookInfo.objects.create()  

删:

book.delete() 和BookInfo.objects.get().delete()  

改:

book.name='xxx' book.save() 和 BookInfo.objects.filter(id =XXX).update(name=xxx)  # 如果 BookInfo.objects.get(id =XXX).update(name=xxx) 会报错

  

查询集

  • 两大特性
    • 惰性执行:创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用
    • 缓存:查询集的结果被存下来之后,再次查询时会使用之前缓存的数据
  • 返回列表的过滤器如下:
    • all():返回所有数据
    • filter():返回满足条件的数据
    • exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字
    • order_by():排序,默认升序,降序的话在条件前加减号(-)

        返回的QuerySet类型可以继续调用查询方法。也就是可以含有零个、一个或多个过滤器。

  • 返回单个值的过滤器如下:
    • get():返回单个满足条件的对象
      • 如果未找到会引发"模型类.DoesNotExist"异常
      • 如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常
  • 与sql语句相比,查询集和select语句等价,过滤器像where和limit子句
  • aggregate():聚合
  • exists():判断查询集中是否有数据,如果有则返回True,没有则返回False
  • 查询集 可以像列表一样进行切片。

字段查询

  • 在Django的shell中 用__来连接属性名(sql中叫字段)和比较运算符,类似sql语句中的空格
  • 属性名称__比较运算符=值
    比如:类名.objects.filter(类属性__isnull=False)

条件运算符主要有:

  • __exact:表示判等
  • __contains:是否包含
  • __startswith、__endswith:以指定值开头或结尾
  • __isnull:是否为null

        (以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如__iexact、__icontains、__istartswith、__iendswith)

  • __in:是否包含在范围内
  • __gt、__gte、__lt、__lte:大于、大于等于、小于、小于等于,(不等于使用等于的运算符,使用exclude()过滤器)
  • __year、__month、__day、__week_day、__hour、__minute、__second:对日期时间类型的属性进行运算

关联查询

  • Django中也能实现类似于join查询,要查那个类中的数据就从那个类来查,写关联条件时如果类中没有关联属性,要写类的名字小写,有关联属性就写关联属性.语法如下:
要查的模型.objects.过滤器(关联模型类名小写[或关联属性]__属性名[__运算符]=值)

F对象

  • 对象的属性与属性值比较,从django.db.models导入F对象。语法如下:
from django.db.models import F
F(属性名)

可以在F()对象上使用算数运算

 

BookInfo.objects.filter(readcount__gt=F('commentcount')*2)

  

Q对象 

  • 多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字,如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符。(实际上Q对象,在我的理解就是相当于())
  • Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或,Q对象前使用~操作符,表示非not
  • 从django.db.models导入Q对象。语法如下:
  • from django.db.models import Q
    Q(属性名__运算符=值)
    BookInfo.objects.filter(Q(readcount__gt=20)|Q(id__lt=3))
    

      

聚合函数

  • 使用aggregate()过滤器调用聚合函数,返回一个字典。
  • 从django.db.models中导入聚合函数,包括:Avg,Count,Max,Min,Sum (注意这里第一个字母要大写)

跟聚合相关的还有一个count()函数 返回的是一个数字。

使用方法:

 

from django.db.models import Max
BookInfo.objects.aggregate(Max('readcount'))
BookInfo.objects.count()

 

  

 

posted @ 2021-09-08 11:22  微笑_百年  阅读(59)  评论(0编辑  收藏  举报