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

Django1.11模型类数据库操作的更多相关文章

  1. java工具类--数据库操作封装类

    java对数据库操作简单处理,如下代码即可,封装了 增删改查及获取连接.关闭连接. 代码如下: package com.test; import java.sql.Connection; import ...

  2. FunDA(11)- 数据库操作的并行运算:Parallel data processing

    FunDA最重要的设计目标之一就是能够实现数据库操作的并行运算.我们先重温一下fs2是如何实现并行运算的.我们用interleave.merge.either这几种方式来同时处理两个Stream里的元 ...

  3. Django-1.11中文文档——操作关联对象

    关联对象参考 写在最前面--基础示例模型如下: from django.db import models class Blog(models.Model): name = models.CharFie ...

  4. vs2017 + Python3.6 +Django1.11 连接mysql数据库

    不废话直接来. vs2017创建一个新的python web项目之后默认链接数据库是sqlite.但是我就想连接到Mysql 上面玩,于是开始倒腾了.下面是步骤 1.修改settings.py 文件需 ...

  5. python3.6+linux服务器+django1.11连接MYSQL数据库

    1.django创建一个项目,在项目的settings.py中配置Mysql DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysq ...

  6. PyCharm中 Django1.11配置Mysql数据库

    1.Django 中配置MySQL数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名称 ...

  7. django的模型类管理器-----------数据库操作的封装

    模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除 ...

  8. 多进程,多线程,使用sqlalchemy 创建引擎(单例模式),闭包装饰器承载数据库会话,装饰模型类的类方法

    python 多进程,多线程,使用 sqlalchemy 对数据库进行操作 创建引擎 & 获取数据库会话: 使用类的方式,然后在对象方法中去创建数据库引擎(使用单例,确保只创建一个对象,方法里 ...

  9. Django框架(七):模型(三) 关联、模型类的属性

    1. 关联 1.1 模型类关系 关系型数据库的关系包括三种类型: ForeignKey:一对多,将字段定义在多的一端中. ManyToManyField:多对多,将字段定义在任意一端中. OneToO ...

随机推荐

  1. 吴裕雄--天生自然java开发常用类库学习笔记:ListIterator接口

    import java.util.ArrayList ; import java.util.List ; import java.util.ListIterator ; public class Li ...

  2. tab选项卡,不带自动切换定时器

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  3. git上传流程

    转: 1.在github上创建项目 2.使用git clone https://github.com/xxxxxxx/xxxxx.git克隆到本地 3.编辑项目 4.git add . (将改动添加到 ...

  4. 怎样解题 --解题表(how to solve it)

    <怎样解题> 美.波利亚 下面是来自书中的解题表: 理解题目 第一 理解题目 你必须理解题目 未知量是什么?已知数据是什么?条件是什么? 条件有可能满足吗?条件是否可以确定未适量?或者它不 ...

  5. 六、JavaScript之调用外部JavaScript文件

    一.外部JavaScript文件,不需要写<SCRIPT>标签,myScript.js代码如下: 二.index.php代码如下 三.运行效果如下 四.点击之后 myScript.php如 ...

  6. 十、SAP小数需要用引号括起来

    一.我们定义一个浮点型f的变量,然后赋值,检查会报错 二.我们把引号括起来之后,就正常了,如下: 三.输出效果如下: 注意:f类型的变量,输出不是准确值

  7. Ubuntu 14.04 安装 Dash to Dock

    每次打开或选择一个已经打开的应用都要把鼠标指到左上角,相当费事. Ubuntu 14.04 GNOME自带 Tweaks (系统中名为:优化工具),可以使界面如Windows般(最小化.最大化.底部任 ...

  8. 吴裕雄--天生自然C++语言学习笔记:C++ 多态

    多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态. C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数. 下面的实例中,基类 Sh ...

  9. UVA - 120 Stacks of Flapjacks(煎饼)

    题意:一叠煎饼,每个煎饼都有一个数字,每次可以选择一个数k,把从锅底开始数第k张以及其上面的煎饼全部翻过来,最终使煎饼有序排列(锅顶最小,锅底最大). 分析:依次从锅底向上,优先排数字最大的煎饼.每次 ...

  10. UVA - 1612 Guess (猜名次)(贪心)

    题意:有n(n<=16384)位选手参加编程比赛.比赛有3道题目,每个选手的每道题目都有一个评测之前的预得分(这个分数和选手提交程序的时间相关,提交得越早,预得分越大).接下来是系统测试.如果某 ...