• django自带的orm增删改


    # 转载请留言联系

    • 模型管理器

    模型管理器:objects属性

    1. 每个模型类默认都有一个叫 objects 的类属性,它由django自动生成
    2. 我们把 objects 称为 模型管理器,其类型为: django.db.models.manager.Manager
    3. 通过objects属性,可以实现对数据库相关的操作,常用方法如下
    objects管理器中的方法返回类型作用
    模型类.objects.create() 模型类对象 创建一个对象(新增一条数据)
    模型类.objects.get() 模型对象 查询一个对象,且只能有一个:
    如果查到多条数据,则报:MultipleObjectsReturned
    如果查询不到数据,则报:DoesNotExist
    模型类.objects.all() QuerySet 查询所有的对象
    模型类.objects.count() 数字 查询总共有多少条数据
    模型类.objects.filter() QuerySet 查询满足条件的对象
    模型类.objects.exclude() QuerySet 查询不满条件的对象
    模型类.objects.order_by() QuerySet 对查询结果集进行排序
    模型类.objects.aggregate() 字典,例如:
    {'salary__avg': 9500.0}
    进行聚合操作
    Sum, Count, Max, Min, Avg
    模型类.objects.exists() True或者False True表示有查询集中有数据,否则没有

    注意:get()在sqlchemy中只能填主键,django的可以填任意的,只需要保证查出来的是一条数据即可。不然会报错。

    拓展

    QuerySet支持切片操作:

    1.query_set[0]:取出查询集的第一条数据,不存在会抛IndexError异常。

    2.query_set[0:2]也可以,但是注意下标不支持负数!

    例如有两张表,员工与部门,他们是一对多关系。现在对他们的数据进行操作。

    1.模型对象.save()

    # 新增员工
    e = Employee()
    e.name = "chichung"
    e.age = 23
    # 特别注意这句!!!
    e.department = Department.objects.get(id=1)
    e.save()

      当插入关联属性时,先查出要关联的对象,然后再赋值。如果直接写e.department = 1的话,根据员关联查询会出现问题的。

    2.模型类.objects.create(属性1=值1,属性2=值2,...)

    Employee.objects.create(name = "chichung",age = 23,department = Department.objects.get(id=1))

    1.模型类对象.delete()

    e = Employee.objects.get(id=1)
    e.delete()

    2.模型类.filter(条件).delete()

    Employee.objects.filter(id=1).delete()

    拓展:

    这两种方式删除有什么区别呢?

    第一种,会先查询,这时候调用了一条SQL语句。然后删除,又调用了一条SQL语句。所以效率比较低。

    第二种,直接执行一条SQL语句进行删除,所以效率比较高。

    第一种的使用场景是,开头有用到,已经查询了,然后直接调用删除,那么实际删除也只是用了一条。

    1.模型类对象.save()

    e = Employee.objects.get(id=1)
    e.name = "mouren"
    e.save()
    # 注意,当id已存在时,才是修改操作,不然是新增操作

    2.模型类.filter(条件).update(属性1=值1,属性2=值2,...)

    Employee.objects.filter(id=1).update(name="某人")
  • 相关阅读:
    CentOS7通过 yum安装路径查询方法
    centos中如何查看tomcat的版本
    CentOS下安装Filezilla软件
    关于jFinal开发中遇到的中文乱码问题解决办法
    jFinal render为什么不跳转到指定的页面
    [Algorithm] 1290. Convert Binary Number in a Linked List to Integer
    一道百度面试题
    ORA-01078, LRM-00123错误处理
    hdu 4115 (2—SAT)
    【PAT Advanced Level】1004. Counting Leaves (30)
  • 原文地址:https://www.cnblogs.com/chichung/p/9917706.html
Copyright © 2020-2023  润新知