Django中更新多个对象数据与删除对象的方法


Posted in Python onJuly 17, 2015

更新多个对象

例如说我们现在想要将Apress Publisher的名称由原来的”Apress”更改为”Apress Publishing”。若使用save()方法,如:

>>> p = Publisher.objects.get(name='Apress')
>>> p.name = 'Apress Publishing'
>>> p.save()

这等同于如下SQL语句:

SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE name = 'Apress';

UPDATE books_publisher SET
  name = 'Apress Publishing',
  address = '2855 Telegraph Ave.',
  city = 'Berkeley',
  state_province = 'CA',
  country = 'U.S.A.',
  website = 'http://www.apress.com'
WHERE id = 52;

(注意在这里我们假设Apress的ID为52)

在这个例子里我们可以看到Django的save()方法更新了不仅仅是name列的值,还有更新了所有的列。 若name以外的列有可能会被其他的进程所改动的情况下,只更改name列显然是更加明智的。 更改某一指定的列,我们可以调用结果集(QuerySet)对象的update()方法: 示例如下:

>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')

与之等同的SQL语句变得更高效,并且不会引起竞态条件。

UPDATE books_publisher
SET name = 'Apress Publishing'
WHERE id = 52;

update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录。 以下示例演示如何将所有Publisher的country字段值由'U.S.A'更改为'USA':

>>> Publisher.objects.all().update(country='USA')
2

update()方法会返回一个整型数值,表示受影响的记录条数。 在上面的例子中,这个值是2。
删除对象

删除数据库中的对象只需调用该对象的delete()方法即可:

>>> p = Publisher.objects.get(name="O'Reilly")
>>> p.delete()
>>> Publisher.objects.all()
[<Publisher: Apress Publishing>]

同样我们可以在结果集上调用delete()方法同时删除多条记录。这一点与我们上一小节提到的update()方法相似:

>>> Publisher.objects.filter(country='USA').delete()
>>> Publisher.objects.all().delete()
>>> Publisher.objects.all()
[]

删除数据时要谨慎! 为了预防误删除掉某一个表内的所有数据,Django要求在删除表内所有数据时显示使用all()。 比如,下面的操作将会出错:

>>> Publisher.objects.delete()
Traceback (most recent call last):
 File "<console>", line 1, in <module>
AttributeError: 'Manager' object has no attribute 'delete'

而一旦使用all()方法,所有数据将会被删除:

>>> Publisher.objects.all().delete()

如果只需要删除部分的数据,就不需要调用all()方法。再看一下之前的例子:

>>> Publisher.objects.filter(country='USA').delete()

Python 相关文章推荐
举例介绍Python中的25个隐藏特性
Mar 30 Python
python使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
分享Python字符串关键点
Dec 13 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
python spyder中读取txt为图片的方法
Apr 27 Python
在Python中使用Neo4j的方法
Mar 14 Python
python psutil模块使用方法解析
Aug 01 Python
一行python实现树形结构的方法
Aug 09 Python
python 单线程和异步协程工作方式解析
Sep 28 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
Java byte数组操纵方式代码实例解析
Jul 22 Python
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 #Python
Django中对数据查询结果进行排序的方法
Jul 17 #Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 #Python
Python的Django框架中的数据过滤功能
Jul 17 #Python
在Python的Django框架中更新数据库数据的方法
Jul 17 #Python
在Django框架中运行Python应用全攻略
Jul 17 #Python
Python的Django框架中的数据库配置指南
Jul 17 #Python
You might like
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
js控制table合并具体实现
2014/02/20 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
Python-嵌套列表list的全面解析
2016/06/08 Python
Python合并字典键值并去除重复元素的实例
2016/12/18 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
酒店应聘自荐信
2013/11/09 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
2014年工程工作总结
2014/11/25 职场文书
感恩节寄语2015
2015/03/24 职场文书
关于环保的宣传稿
2015/07/23 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android