在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正则匹配抓取豆瓣电影链接和评论代码分享
Dec 27 Python
Python的randrange()方法使用教程
May 15 Python
Python中判断输入是否为数字的实现代码
May 26 Python
用python编写第一个IDA插件的实例
May 29 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
python挖矿算力测试程序详解
Jul 03 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
Python进阶之迭代器与迭代器切片教程
Jan 29 Python
pandas to_excel 添加颜色操作
Jul 14 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 Python
Python实现随机爬山算法
Jan 29 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 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标签云的实现代码
2012/10/10 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
js change,propertychange,input事件小议
2011/12/20 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
面向初学者的Python编辑器Mu
2018/10/08 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
Python日志器使用方法及原理解析
2020/09/27 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
《落花生》教学反思
2014/02/25 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
五年级上册复习计划
2015/01/19 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android