zoukankan      html  css  js  c++  java
  • 模型中的增删改查

    1.增加数据

      1.Entry.objects.create(属性=值,属性=值)
        返回值:
          插入成功:则返回创建好的实体对象
          插入失败:则返回 None

    author = Author.objects.create(name="zengsf",age=23,email="zsf961006@163.com")

      2.创建一个Entry对象,并通过save()进行保存
        obj = Entry(属性=值,属性=值)
        obj.属性 = 值
        obj.save()
        无返回值,保存成功后,obj会被重新赋值

      author = Author(name='zengsf',age=23,email='zsf961006@163.com')
      author.save()

      3.通过字典创建Entry对象,并通过save()进行保存
        dic = {
          '属性1':'值1',
          '属性2':'值2',
        }

        obj = Entry(**dic)
        obj.save()

    dic = {
        'name':'zengsf',
        'age':23,
        'email':'zsf961006@163.com',
      }
    
      author = Author(**dic)
      author.save()

    2.查询数据

      通过 Entry.objects 调用查询接口函数,Entry.objects 提供了对该实体的所有的数据的查询的所有的接口函数,都可以通过一个 query 属性来得到所对应的sql语句
      Entry.objects.all().query

      1.查询所有结果
        方法:all()
        用法:Entry.objects.all()
        返回:QuerySet  # 查询结果集,本质是一个封装了若干对象的列表
      2.查询返回指定列
        方法: values() | values('列名1','列名2')
        作用:查询表中数据的部分列,封装到字典中,再封装到QuerySet中
        返回:QuerySet  # 查询结果集,本质是一个封装了若干字典的列表
      3.查询返回指定列
        方法:values_list()
        作用:将数据封装到元组中再封装到列表中,且元组中存放的是值。
      4.排序方法
        方法:order_by()
        语法:Entry.objects.order_by('列1','-列2')
        默认是升序排序,列名前加-,则表示降序排序
      5.查询只返回一条数据
        方法:get(条件)
        注意:该方法只适用于只能查询出一条结果的场合,如果查询多于一条数据或没查询出结果都会抛出异常
        返回:单个实体对象
      6.根据条件查询部分行
        方法:filter(条件)
        返回:QuerySet
        ex:
          1.查询 Author 实体中 id=1 的信息
          authors=Author.objects.filter(id=1)

          非等值条件需要使用Field Lookups(查询谓词)
          语法:Entry.objects.filter(属性__查询谓词=值)
          例如:年龄大于20的所有信息
             author = Author.objects.filter(age__gt = 20)
          官方文档:https://docs.djangoproject.com/en/2.1/ref/models/querysets/#exact
      7.对条件取反
        方法:exclude(条件)
        ex:查取id不为1的所有信息
          Author.objects.exclude(id=1)
          select * from index_author where not(id=1)
      8.聚合查询(不带分组)
        方法:aggregate(列名=聚合函数('列'))
        ex:
          Author.objects.aggregate(sumAge=Sum('age'))
        聚合函数:
        1.Avg() : 平均值   2.Count() : 数量  3.Sum() : 求和
        4.Min() : 求最小值  5.Max() : 求最大值
      9.聚合查询(带分组)
        方法:annotate(名=聚合函数('列'))
        ex:
          按 id 分组 查询平均年龄
          Author.objects.values('id').annotate(avgAge=Avg('age')).all()

      10.集结 where,分组查询,having 于一体的查询接口
        Author.objects.filter(id__gte=3) # where 子句
              .values('isActive') # group by 子句
              .annotate(avgAge=Avg('age')) # 查询聚合函数
              .filter(avgAge__gte=30) # having 子句

    3.修改数据
      1.修改单个实体步骤
        1.查:通过 get() 查询出要修改的实体
        2.改:通过实体对象的属性赋值
        3.保存“”通过实体对象save()方法保存数据回数据库
      2.批量修改数据
        调用QuerySet的update(属性=值,属性=值)实现批量修改

     # 将Author中所有的数据的isActive属性值修改为True
      Author.objects.all().update(isActive=True)

    4.删除数据
      调用实体对象/查询结果集的 delete() 完成删除
      1.删除单个对象
        au=Author.objects.get(id=1)    # 查询一条记录,进行删除
        au.delete()
      2.批量删除
        auList = Author.objects.all()    #查询所有记录,进行删除
        auList.delete()

    5.两个特殊的查找方式,F()和Q()方式

     1.F()
      作用:在执行过程中获取某列的值
      语法:
        from django.db.models import F
        F('列名') :得到对应列的值

    # 将所有人的年龄都加10
    Author.objects.all().update(age=F('age')+10)

     2.Q()
      作用:在查询条件中可以完成 or 操作
      语法:from django.db.models import Q
      Q(条件1)|Q(条件2)

    # 查询 id大于等于3 或 年龄 < 40 的人的信息
    Author.objects.filter(Q(id__gte=3)|Q(age__lt=40))

     

  • 相关阅读:
    nyoj58 最少步数
    oj2787 算24
    一位ACMer过来人的心得
    hdu递推公式水题
    nyoj20 吝啬的国度
    hdu1421 搬寝室
    全排列生成算法:next_permutation
    hdu2544 最短路
    poj1691 Painting A Board
    hdu1274 展开字符串
  • 原文地址:https://www.cnblogs.com/zengsf/p/9966792.html
Copyright © 2011-2022 走看看