Django ORM 操作

Posted 不归路~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django ORM 操作相关的知识,希望对你有一定的参考价值。

ORM 基本操作-创建数据

  • ORM 基本操作包含了增删改查,CRUD操作

  • CRUD是指计算机处理时的增加(create)读取(read)更新(update)和删除(delete)

  • ORM CURD核心 - > 模型类.管理器对象

    • 每个继承自models.Model的模型类,都会有一个object对象别同样继承下来,这个对象叫管理器对象,数据库的增删改查可以通过模型类的管理器实现

    • Class MyModel(models.model):
      	...
      	MyModel.objects.create(...) # objects 就是管理器对象
      
  • Django ORM使用一种只管的方式把数据表中的数据表示成python对象

  • 创建数据中每一条记录就是创建要给数据对象

  • 方案1

    • MyModel.objects.create(属性1=值1,属性2=值2,...)
      • 成功:返回创建好的实体对象
      • 失败:抛出异常
  • 方案2

    • 创建MyModel实例对象,并调用save()进行保存

      obj = MyModel(属性=值...)
      obj.属性=值
      # 执行save()时才插入数据库
      obj.save()
      

ORM 基本操作 - 查询

  • 数据库的查询需要使用管理器对象进行

  • 通过MyModel.objects管理器方法调用查询方法

    • all() 查询全部记录,返回querySet查询对象

      • 用法: MyModel.object.all()

      • 等同于selet * from table

      • 返回QuerySet容器对象,内部存放MyModel实例

      • from bookstore.models import Book
        books = Book.objects.all()
        for book in books:
        	print(\'书名\',book.title)
        	
        # 可以在模型类中定义__str__方法,自定义QuerySet中的输出格式
        def __str__(self):
        	return "书名:%s" %(self.title)
        
    • values(\'列名1\',\'列明2\',,,)

      • MyModel.object.values(...) 查询部分列的数据并返回QuerySet 字典形式
      • 等同于 select \'列名1\',\'列明2\', from tableName
    • values_list(\'列名1\',\'列明2\',..)

    • MyModel.object.values_list(...) 查询部分列的数据并返回QuerySet 元组形式

      • 等同于 select \'列名1\',\'列明2\', from tableName
    • order_by() 相当于.all().order_by()后排序

      • MyModel.objects.order_by("-列","列")
      • -列 表示降序,默认 为升序
    • get(条件) 查找符合条件的单一记录

      • MyModel.objects.get(条件)
      • 返回满足条件的唯 一 一 条数据,若多或无都回抛出异常
      • 该方法只能返回一条数据
    • filter(条件) 查找符合条件的多条记录

      • MyModel.objects.filter(属性1=值1,属性2=值2)
      • 返回包含此条件的全部数据集,多个条件之间的关系为 与 ·and·
      • 返回一个QuerySet容器对象
    • exclude(条件) 查找符合条件之外的全部记录

      • MyModel.objects.exclude(条件)
      • 返回不包含此条件的全部数据集
  • 条件查询

    • 查询谓词

      __exact: 等值匹配

      Book.objects.filter(id__exact=1)等同于select * from book where id=1

      __contains: 包含指定值

      Book.objects.filter(id__contains=1)等同于select * from book where id like \'%1%\'

      __startswith:以XXX开始

      Book.objects.filter(id__startwith=1)等同于select * from book where id like \'1%\'

      __endswith:以XXX结束

      Book.objects.filter(id__endswith=1)等同于select * from book where id like \'%1\'

      __gt:大于指定值

      Book.objects.filter(id__gt=1)等同于select * from book where id>1

      __gte:大于等于

      Book.objects.filter(id__gte=1)等同于select * from book where id >=1

      __lt: 小于

      Book.objects.filter(id__lt=1)等同于select * from book where id <1

      __lte: 小于等于

      Book.objects.filter(id__lte=1)等同于select * from book where id <=1

      __in:查找数据是否在指定范围内

      Book.objects.filter(id__in=[1,2])等同于select * from book where id in (1,2)

      __range: 查找数据是否在指定的范围内

      Book.objects.filter(id__range=(2,5))等同于select * from book where id between 2 and 5

      ORM 更新操作

      • 更新一个数据的步骤
        • 1 查
          • 通过get()得到要修改的实体对象
        • 2 改
          • 通过对象.属性的方式修改数据
        • 3保存
          • 通过对象.save()保存数据

      ORM 删除操作

      • 删除步骤
        • 1 查
          • 查找到结果对应的数据队形
        • 2 删
          • 使用对象.delete()方法实现删除
      • 伪删除
        • 添加字段表示是否可用,默认设置为True,当需要删除时设置为False
        • 确保显示数据的地方,均过滤了添加的字段为True

以上是关于Django ORM 操作的主要内容,如果未能解决你的问题,请参考以下文章

Django---ORM操作大全

Django之ORM

Django-ORM操作数据库无数据问题

Django models ORM基础操作--白话聊Django系列

Django之ORM

Django orm操作