• 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

  • 相关阅读:
    .editorconfig
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    《大道至简》读后感
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/serpent/p/9719618.html
Copyright © 2020-2023  润新知