Django1.11模型类数据库操作

django模型类数据库操作

数据库操作

添加数据

  • 1,创建类对象,属性赋值添加
    • book= BookInfo(name='jack',pub_date='2010-1-1')
      book.save()
    • book= BookInfo()
      book.name = 'java'
      book.pub_date = '2010-1-1'
      book.save()
  • 2,使用模型类的create方法
    • BookInfo.objects.create(name='jack',pub_date='2010-1-1')
      • 直接创建

修改数据

  • 1,获取模型类对象,属性赋值修改
    • book = BookInfo.objects.get(name='jack')
      book.name='tom'
      book.pub_date='2010-1-1'
      book.save()
      • 因为修改的是模型类的属性
        获取对象的时候必须要使用get查询,获取类对象,
        使用filter会报没有name属性,因为filter结果是查询集
  • 2,使用模型类结果集的update()
    可以进行多个修改
    • BookInfo.objects.filter(name='tom').update(name='jack')
      • 直接修改,返回受影响的行数
        update是结果集的方法,使用filter查询

删除数据

  • 1,获取对应模型类对象,调用delete方法删除
    • book=BookInfo.objects.get(name='jack').delete()
      • 返回删除的个数和对象
  • 2,使用模型类结果集的delete()
    可以进行多个删除
    • BookInfo.objects.filter(name='jack').delete()
      • 返回删除的个数和对象

数据查询

基本条件查询

  • 基本查询
    • get
      • 获取单个对象
    • all
      • 获取所有对象
    • count
      • 返回对象的个数
  • 过滤查询
    • filter
      • 根据条件获取对象,返回结果集
    • exclude
      • 根据条件获取不符合条件的对象的结果集
        • 语法:属性名字__比较运算符=值
          • 比较运算符有
            • exact相等
              • BookInfo.objects.filter(pk__exact=1)
              • BookInfo.objects.filter(pk=1)
            • contains包含
              • BookInfo.objects.filter(name__contains='p')
            • endswith/startswith开头/结尾
              • BookInfo.objects.filter(name__startswith='p')
            • isnull=True为空
              • BookInfo.objects.filter(name__isnull=True)
            • in=[]范围
              • BookInfo.objects.filter(id__in=[1,2,3])
            • gt大于
              lt小于
              gte大于等于
              lte小于等于
              • BookInfo.objects.filter(id__gt=4)
            • 日期查询
              year
              mouth
              day
              week
              day
              hour
              minute
              second
              • BookInfo.objects.filter(pub_date__year__gt=1980)
    • get
      • 获取单个对象,不是结果集,范围查询不能使用get

F和Q对象

  • F对象
    • F('')引号
      原理是:直接执行原生sql语句获取值,可以满足两个属性之间的比较
      • BookInfo.objects.filter(readcount__gt=F('commentcount'))
      • BookInfo.objects.filter(readcount__gt=F('commentcount')*2)
  • Q对象
    • Q()
      多个过滤器逐个调用
      • &且
        • BookInfo.objects.filter(Q(id__gt=2)&Q(id__lt=5))
        • BookInfo.objects.filter(id__gt=2,id__lt=5)
      • |或
        • BookInfo.objects.filter(Q(id__gt=2)|Q(age__lt=55))
      • ~非
        • 子主题 1
          • BookInfo.objects.filter(~Q(id__gt=2))

聚合函数和排序函数

  • 聚合函数
    • aggregate()过滤器调用聚合函数
      导入聚合函数:from django.db.models import Sum
      • Sum
        • BookInfo.objects.aggregate(Sum('readcount'))
          • 返回值:{‘read__count’:554}
          • Sum(' ')
      • Avg
      • Count
        • 可以直接使用
          • BookInfo.objects.count()
      • Max
      • Min
  • 排序函数
    • order_by(' ')对查询集进行排序
      返回的是一个还是一个查询集
      • BookInfo.objects.all().order_by('readcount')
        • BookInfo.objects.filter(id__gt=2).order_by('readcount')
      • 降序排序
        • BookInfo.objects.all().order_by('-readcount')

查询集

  • filter
  • all
  • exclude
  • order_by

关联查询

  • 一对多
    • 多的一方定义外键
    • 由一到多查询
      • 多对应的模型类名小写_set
        • BookInfo.objects.get(id=1).peopleinfo_set.all()
    • 由多到一查询
      • 外键
        • PeopleInfo.objects.get(id=1).book

关联过滤查询

  • 一对多
    • 多模型为条件查一模型数据
      • BookInfo.objects.filter(peopleinfo__id=1)
    • 一模型作为条件查多模型数据
      • PeopleInfo.objects.filter(book__id=1)

特点

惰性执行

缓存

限制查询集,切片

  • BookInfo.objects.all()[0:2]

exists()

  • 判断查询结果中是否有数据,True,False

XMind: ZEN - Trial Version

原文地址:https://www.cnblogs.com/serpent/p/9719618.html