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=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...
随机推荐
- java设计模式之装饰器模式以及在java中作用
在JAVA I/O类库里有很多不同的功能组合情况,这些不同的功能组合都是使用装饰器模式实现的,下面以FilterInputStream为例介绍装饰器模式的使用 FilterInputStream和F ...
- rcnn caffe matlab 配置完成 14.04 cuda 7.0
http://blog.csdn.net/real_myth/article/details/42672381 各种痛苦.实验室网速还是龟速. 莫名其妙的错误. gcc还降级到4.7,opencv 3 ...
- sc"
2.11 题目:二叉搜索树中的最近公共祖先 2.12 设计思路 if 树中不存在 u 或 v 错误 结束程序 定义 p 指向根节点 while true do: if p->key大于 u 和 ...
- Xampp+Openfire+Spark的简单使用
Openfire与Spark的简单实用 1.安装Openfire 百度云 提取码:uu11 2.查找路径 /usr/local/openfire 这时候需要将openfire的文件属性都设置为 可读可 ...
- 7forJava
interface Pet{ public String getName(); public String getColor(); public int getAge(); } class Cat i ...
- Java空指针异常解决方法
Throwable是所有错误或异常的超类,只有当对象是这个类的实例时才能通过Java虚拟机或者Java throw语句抛出. 当Java运行环境发出异常时,会寻找处理该异常的catch块,找到对应的c ...
- Kafka数据辅助和Failover
数据辅助与Failover CAP理论(它具有一致性.可用性.分区容忍性) CAP理论:分布式系统中,一致性.可用性.分区容忍性最多只可同时满足两个.一般分区容忍性都要求有保障,因此很多时候在可用性与 ...
- Configuring Dojo with dojoConfig - The Dojo Toolkit
转载自Dojo官网 Configuring Dojo with dojoConfig The dojoConfig object (formerly djConfig) allows you to s ...
- SRM707 div1 MultiplyAddPuzzle
题目大意:给定4个数,s,t,a,b 每次可以将s加a或者乘b,问最少多少次可以得到t 做法:考虑最后的形式,肯定是s*b^n + a*f(b),f(b)是关于b的多项式 那么b乘多少次实际上是可以知 ...
- 【CF Round 434 A. k-rounding】
Time limit per test1 second memory limit per test 256 megabytes input standard input output standard ...