在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实现代理服务功能实例
Nov 15 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
详解用Python练习画个美队盾牌
Mar 23 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
Python3运算符常见用法分析
Feb 14 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
详解scrapy内置中间件的顺序
Sep 28 Python
python 如何设置守护进程
Oct 29 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 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的ajax框架xajax入门与试用介绍
2010/12/19 PHP
Web程序工作原理详解
2014/12/25 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
Python简单计算文件夹大小的方法
2015/07/14 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
python的re模块使用方法详解
2019/07/26 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
上班睡觉检讨书
2014/01/09 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
校庆活动策划方案
2014/06/05 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
2014年检验科工作总结
2014/11/22 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫