在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系列之教你如何根据图片生成字符画
May 23 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
基于python的Tkinter编写登陆注册界面
Jun 30 Python
Python reduce()函数的用法小结
Nov 15 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
python进行TCP端口扫描的实现
Dec 21 Python
Django后台admin的使用详解
Jul 08 Python
python项目对接钉钉SDK的实现
Jul 15 Python
Win10里python3创建虚拟环境的步骤
Jan 31 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
python输入中文的实例方法
Sep 14 Python
Python移位密码、仿射变换解密实例代码
Jun 27 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/07/29 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
PHP安全配置详细说明
2011/09/26 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
毕业生在校学习的自我评价分享
2013/10/08 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
歌舞青春观后感
2015/06/10 职场文书
mysql如何查询连续记录
2022/05/11 MySQL
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript