在Python的Django框架中更新数据库数据的方法


Posted in Python onJuly 17, 2015

先使用一些关键参数创建对象实例,如下:

>>> p = Publisher(name='Apress',
...     address='2855 Telegraph Ave.',
...     city='Berkeley',
...     state_province='CA',
...     country='U.S.A.',
...     website='http://www.apress.com/')

这个对象实例并 没有 对数据库做修改。 在调用`` save()`` 方法之前,记录并没有保存至数据库,像这样:

>>> p.save()

在SQL里,这大致可以转换成这样:

INSERT INTO books_publisher
  (name, address, city, state_province, country, website)
VALUES
  ('Apress', '2855 Telegraph Ave.', 'Berkeley', 'CA',
   'U.S.A.', 'http://www.apress.com/');

因为 Publisher 模型有一个自动增加的主键 id ,所以第一次调用 save() 还多做了一件事: 计算这个主键的值并把它赋值给这个对象实例:

>>> p.id
52  # this will differ based on your own data

接下来再调用 save() 将不会创建新的记录,而只是修改记录内容(也就是 执行 UPDATE SQL语句,而不是 INSERT 语句):

>>> p.name = 'Apress Publishing'
>>> p.save()

前面执行的 save() 相当于下面的SQL语句:

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;

注意,并不是只更新修改过的那个字段,所有的字段都会被更新。 这个操作有可能引起竞态条件,这取决于你的应用程序。 请参阅后面的“更新多个对象”小节以了解如何实现这种轻量的修改(只修改对象的部分字段)。

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

选择对象

当然,创建新的数据库,并更新之中的数据是必要的,但是,对于 Web 应用程序来说,更多的时候是在检索查询数据库。 我们已经知道如何从一个给定的模型中取出所有记录:

>>> Publisher.objects.all()
[<Publisher: Apress>, <Publisher: O'Reilly>]

这相当于这个SQL语句:

SELECT id, name, address, city, state_province, country, website
FROM books_publisher;

注意

注意到Django在选择所有数据时并没有使用 SELECT* ,而是显式列出了所有字段。 设计的时候就是这样: SELECT* 会更慢,而且最重要的是列出所有字段遵循了Python 界的一个信条: 明言胜于暗示。

有关Python之禅(戒律) :-),在Python提示行输入 import this 试试看。

让我们来仔细看看 Publisher.objects.all() 这行的每个部分:

  •     首先,我们有一个已定义的模型 Publisher 。没什么好奇怪的: 你想要查找数据, 你就用模型来获得数据。
  •     然后,是objects属性。 它被称为管理器,我们将在第10章中详细讨论它。 目前,我们只需了解管理器管理着所有针对数据包含、还有最重要的数据查询的表格级操作。
  •     所有的模型都自动拥有一个 objects 管理器;你可以在想要查找数据时使用它。
  •     最后,还有 all() 方法。这个方法返回返回数据库中所有的记录。 尽管这个对象 看起来 象一个列表(list),它实际是一个 QuerySet 对象, 这个对象是数据库中一些记录的集合。
Python 相关文章推荐
python自动格式化json文件的方法
Mar 11 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
Apr 09 Python
在Python中使用SQLite的简单教程
Apr 29 Python
Python数据类型详解(三)元祖:tuple
May 08 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
python中将一个全部为int的list 转化为str的list方法
Apr 09 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
Jun 04 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 Python
python读取mnist数据集方法案例详解
Sep 04 Python
在Django框架中运行Python应用全攻略
Jul 17 #Python
Python的Django框架中的数据库配置指南
Jul 17 #Python
浅谈python中截取字符函数strip,lstrip,rstrip
Jul 17 #Python
在Django的视图中使用数据库查询的方法
Jul 16 #Python
详解Python的Django框架中的模版继承
Jul 16 #Python
Django中模版的子目录与include标签的使用方法
Jul 16 #Python
Django中使用locals()函数的技巧
Jul 16 #Python
You might like
php中文字符截取防乱码
2008/03/28 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
浅谈PDO的rowCount函数
2015/06/18 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
急诊科护士自我鉴定
2013/10/14 职场文书
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
硕士研究生自我鉴定
2013/11/08 职场文书
初中三年学生的学习自我评价
2013/11/13 职场文书
军训生自我鉴定范文
2013/12/27 职场文书
小学生家长寄语
2014/04/02 职场文书
端午节活动总结
2014/08/26 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
Python中可变和不可变对象的深入讲解
2021/08/02 Python
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL