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 isinstance函数介绍
Apr 14 Python
基于wxpython实现的windows GUI程序实例
May 30 Python
Python设计模式之代理模式简单示例
Jan 09 Python
Python定时任务sched模块用法示例
Jul 16 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
python的reverse函数翻转结果为None的问题
May 11 Python
基于keras中的回调函数用法说明
Jun 17 Python
python实现简单区块链结构
Apr 25 Python
如何判断pytorch是否支持GPU加速
Jun 01 Python
Python操作CSV格式文件的方法大全
Jul 15 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实现最简单的MVC框架实例教程
2014/09/08 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
Vue分页组件实例代码
2017/04/17 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
jQuery实现左右滑动的toggle方法
2018/03/03 jQuery
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
Java及python正则表达式详解
2017/12/27 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Python远程方法调用实现过程解析
2020/07/28 Python
python 星号(*)的多种用途
2020/09/21 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
会计专业毕业生自我鉴定
2013/10/29 职场文书
优秀的计算机专业求职信范文
2013/12/27 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
合作意向书范本
2014/03/31 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书