django自带的orm增删改
# 转载请留言联系
模型管理器
模型管理器:objects属性
- 每个模型类默认都有一个叫
objects的类属性,它由django自动生成 - 我们把
objects称为 模型管理器,其类型为:django.db.models.manager.Manager - 通过
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增删改的更多相关文章
- Django 自带的ORM增删改查
通过Django来对数据库进行增删改查 1 首先创建类,在app应用程序里面的model模块里面创建类,写好数据库信息,方便我们待会初始化: 2 创建在django项目里面的settings里面添加 ...
- Django框架(三)—— orm增删改查、Django生命周期
目录 orm增删改查.Django生命周期 一.orm介绍 二.orm增删改字段 三.Django生命周期 orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object ...
- Django框架(三)-- orm增删改查、Django生命周期
一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 开发效率高 缺点: SQL的效率低 ...
- ORM增删改查并发性能测试2
前言 上一篇<ORM增删改查并发性能测试>出现了点小失误,有的输出SQL日志的代码没有禁用,数据库连接字符串可能有问题.统一环境,统一代码后,重新写一篇. 这次重点是并发性能测试,真不是为 ...
- 饮冰三年-人工智能-Python-24 Django ORM增删改查
一:首先使用默认的sqlite3创建表 1:现在在models.py中添加表模型 from django.db import models # Create your models here. cla ...
- $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期
1 orm介绍 ORM是什么 ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM. 一 ...
- django ORM 增删改查 模糊查询 字段类型 及参数等
ORM 相关 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (), gen ...
- day054 组件 CBV FBV 装饰器 ORM增删改查
组件: 把一小段HTML 放在一个HTML中 nav.html 使用: {% include ‘nav.html ’ %} 一. FBV 和CBV 1.FBV(function base ...
- 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查
内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...
随机推荐
- 软件工程项目组Z.XML会议记录 2013/11/06
软件工程项目组Z.XML会议记录 [例会时间]2013年11月06日星期二21:00-22:00 [例会形式]小组讨论 [例会地点]三号公寓楼会客厅 [例会主持]李孟 [会议记录]薛亚杰 会议整体流程 ...
- [译]如何比较同一分支上的不同commit的代码区别?
原文来源:https://stackoverflow.com/questions/3338126/how-do-i-diff-the-same-file-between-two-different-c ...
- lintcode-100-删除排序数组中的重复数字
100-删除排序数组中的重复数字 素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 样例 给出数组A =[1,1,2],你的函数应该返回长度2,此时 ...
- 【EasyNetQ】- 多态发布和订阅
您可以订阅接口,然后发布该接口的实现. 我们来看一个例子.我有一个接口IAnimal和两个实现Cat和Dog: public interface IAnimal { string Name { get ...
- jloi2017(shoi2017?)六省联考酱油记
Day -n 听说了4.22.4.23的省选,而且还是六省联考. 压力山大. 尽管我只是一名高一的simple OIer,在省选到来之前,心里还是很紧张的. 毕竟自己也知道南方dalao们都是神犇,像 ...
- P4018 Roy&October之取石子
题目背景 Roy和October两人在玩一个取石子的游戏. 题目描述 游戏规则是这样的:共有n个石子,两人每次都只能取 p^kpk 个(p为质数,k为自然数,且 p^kpk 小于等于当前剩余石子数), ...
- 【题解】CQOI2015选数
这题做的时候接连想错了好多次……但是回到正轨上之后依然是一个套路题.(不过这题好像有比莫比乌斯反演更好的做法,莫比乌斯反演貌似是某种能过的暴力ヽ(´ー`)┌)不过能过也就行了吧哈哈. 首先我们把数字的 ...
- 关于final局部变量引用的研究
嵌套类(内部类)方法安全引用外部方法局部变量的原理 嵌套类方法引用外部局部变量,必需将声明为final,否则将出现 Cannot refer to a non-final variable * ins ...
- 解决IE下页面空白或者报错:[vuex] vuex requires a Promise polyfill in this browser
[vuex] vuex requires a Promise polyfill in this browser 上述错误的原因是不支持 Promise 方法,导致页面出现空白无法加载. 解决方法如下: ...
- swagger学习2
转:http://blog.csdn.net/fansunion/article/details/51923720 写的非常好,非常详细,推荐!!!! 最常用的5个注解 @Api:修饰整个类,描述Co ...