在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读取mp3中ID3信息的方法
Mar 05 Python
Python使用gensim计算文档相似性
Apr 10 Python
发布你的Python模块详解
Sep 15 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 Python
一百多行python代码实现抢票助手
Sep 25 Python
python使用zip将list转为json的方法
Dec 31 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
python tkinter实现界面切换的示例代码
Jun 14 Python
python的命名规则知识点总结
Oct 04 Python
详解python变量与数据类型
Aug 25 Python
用python删除文件夹中的重复图片(图片去重)
May 12 Python
只用40行Python代码就能写出pdf转word小工具
May 31 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
session 的生命周期是多长
2006/10/09 PHP
一个用php实现的获取URL信息的类
2007/01/02 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
简单谈谈js的数据类型
2017/09/25 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
python查询mysql,返回json的实例
2018/03/26 Python
python实现简单多人聊天室
2018/12/11 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
python时间日期操作方法实例小结
2020/02/06 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
大学生工作自荐书
2014/06/16 职场文书
投资意向书
2014/07/30 职场文书
2014年行政工作总结
2014/11/19 职场文书
详解JS数组方法
2021/11/20 Javascript
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android
mysql的Buffer Pool存储及原理
2022/04/02 MySQL