在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中使用logging模块打印log日志详解
Apr 05 Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
Python 面试中 8 个必考问题
Nov 16 Python
python3+pyqt5+itchat微信定时发送消息的方法
Feb 20 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
python tkinter实现彩球碰撞屏保
Jul 30 Python
python openCV获取人脸部分并存储功能
Aug 28 Python
Sentry错误日志监控使用方法解析
Nov 12 Python
Python利用socket模块开发简单的端口扫描工具的实现
Jan 27 Python
PyCharm 安装与使用配置教程(windows,mac通用)
May 12 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+mysql留言本源码
2009/11/11 PHP
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
深入了解Python数据类型之列表
2016/06/24 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python处理中文标点符号大集合
2018/05/14 Python
Python多进程写入同一文件的方法
2019/01/14 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
综合办公室主任职责
2013/12/16 职场文书
《四季》教学反思
2014/04/08 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
公司辞职信模板
2015/05/13 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis
MongoDB支持的索引类型
2022/04/11 MongoDB