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中利用函数装饰器实现备忘功能
Mar 30 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
Python离线安装PIL 模块的方法
Jan 08 Python
python自动化测试之如何解析excel文件
Jun 27 Python
django的聚合函数和aggregate、annotate方法使用详解
Jul 23 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
在python image 中安装中文字体的实现方法
Aug 22 Python
python生成随机红包的实例写法
Sep 02 Python
pytorch常见的Tensor类型详解
Jan 15 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
自己搭建resnet18网络并加载torchvision自带权重的操作
May 13 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模板技术[转]
2007/01/04 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
checkbox 复选框不能为空
2009/07/11 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
图解Python变量与赋值
2018/04/03 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
北京银河万佳Java面试题
2012/03/21 面试题
小学生班会演讲稿
2014/01/09 职场文书
排查整治工作方案
2014/06/09 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
标准发言稿结尾
2019/07/18 职场文书
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL
Python实现归一化算法详情
2022/03/18 Python