zoukankan      html  css  js  c++  java
  • 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="某人")
  • 相关阅读:
    启动hadoop 2.6遇到的datanode启动不了
    .net开发遇到的一个问题
    there are 0 datanode.....
    更改HDFS权限
    VMware提示:已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作。解决方案
    Hive学习
    linux下mysql安装
    (5.2)mysql高可用系列——测试环境部署
    【转】mysql索引的探究
    【3.1】【mysql基本实验】mysql复制(主从复制/异步复制/半同步复制,一主一从)
  • 原文地址:https://www.cnblogs.com/chichung/p/9917706.html
Copyright © 2011-2022 走看看