# 转载请留言联系

  • 模型管理器

模型管理器: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="某人")

django自带的orm增删改的更多相关文章

  1. Django 自带的ORM增删改查

     通过Django来对数据库进行增删改查 1 首先创建类,在app应用程序里面的model模块里面创建类,写好数据库信息,方便我们待会初始化: 2 创建在django项目里面的settings里面添加 ...

  2. Django框架(三)—— orm增删改查、Django生命周期

    目录 orm增删改查.Django生命周期 一.orm介绍 二.orm增删改字段 三.Django生命周期 orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object ...

  3. Django框架(三)-- orm增删改查、Django生命周期

    一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 开发效率高 缺点: SQL的效率低 ...

  4. ORM增删改查并发性能测试2

    前言 上一篇<ORM增删改查并发性能测试>出现了点小失误,有的输出SQL日志的代码没有禁用,数据库连接字符串可能有问题.统一环境,统一代码后,重新写一篇. 这次重点是并发性能测试,真不是为 ...

  5. 饮冰三年-人工智能-Python-24 Django ORM增删改查

    一:首先使用默认的sqlite3创建表 1:现在在models.py中添加表模型 from django.db import models # Create your models here. cla ...

  6. $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期

    1 orm介绍  ORM是什么   ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM.  一 ...

  7. django ORM 增删改查 模糊查询 字段类型 及参数等

    ORM 相关 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (), gen ...

  8. day054 组件 CBV FBV 装饰器 ORM增删改查

    组件: ​ 把一小段HTML 放在一个HTML中 nav.html ​ 使用: ​ {% include ‘nav.html ’ %} 一. FBV 和CBV 1.FBV(function base ...

  9. 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查

    内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...

随机推荐

  1. 小程序开发时PC端调试返回结果和手机端IOS不一致问题

    IOS11登录时遇到一个请求与PC返回不一致情况, 在小程序调试时IOS上始终没有wx.request() 不能发送请求 尝试解决方法 打开微信小程序调试的设置, 将TLS设为可信任的域名 设置 -- ...

  2. 学习bash——数据流重定向

    一.概述 1. 数据流 定义:以规定顺序被读取一次的数据序列. 分类:标准输入(stdin).标准输出(stdout)和标准错误输出(stderr). 标准输出:指的是命令执行所回传的正确信息. 标准 ...

  3. 【PHP】- 魔术常量

    PHP 向它运行的任何脚本提供了大量的预定义常量.不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了.有八个魔术常量它们的值随着它们在代 ...

  4. [剑指Offer] 22.从上往下打印二叉树

    [思路]广度优先遍历,队列实现 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode* root) { qu ...

  5. Augmenting Path Algorithm : 一般图最大匹配

    算法原理详见 http://www.csie.ntnu.edu.tw/~u91029/Matching.html orz 带花树很神奇,挖坑最大权匹配 #include <iostream> ...

  6. android 与 小米1S刷机学习

    本文内容为本博客作者原创,转载请注明出处或者发私信. [名词] 1.ROM包 :安卓手机系统,以.ZIP结尾,类似windows的 win7系统包,300M-700M不止 2.卡刷(Recovery模 ...

  7. 【题解】SDOI2016征途

    就放个代码吧……实在是太套路了.不过据说有复杂度还要低很多的算法,不知道是怎么做呀…… #include <bits/stdc++.h> using namespace std; #def ...

  8. Seajs的用法

    以前经常听到Seajs,但是没深入了解过,不清楚到底是用做哪个方面,后来调组到M站做开发,发现项目用到了Seajs,便去了解下 SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实 ...

  9. 如何在Javascript中利用封装这个特性

    对于熟悉C#和Java的兄弟们,面向对象的三大思想(封装,继承,多态)肯定是了解的,那么如何在Javascript中利用封装这个特性呢? 我们会把现实中的一些事物抽象成一个Class并且把事物的属性( ...

  10. git使用笔记(五)打标签

    By francis_hao    Nov 19,2016 当一个项目commit了若干次到了一个可以发布版本的时候一般会给当前的分支状态打一个标签,就像我们常常见到的V1.0之类的. Git 使用的 ...