在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脚本生成sitemap.xml的实现方法
Jan 31 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
python爬虫_自动获取seebug的poc实例
Aug 05 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
python3+mysql查询数据并通过邮件群发excel附件
Feb 24 Python
python 字符串和整数的转换方法
Jun 25 Python
深入理解Python异常处理的哲学
Feb 01 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 Python
Python排序函数的使用方法详解
Dec 11 Python
Python基础之进程详解
May 21 Python
Pandas自定义选项option设置
Jul 25 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/11/05 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
JavaScript 参考教程
2006/12/29 Javascript
JS 自动安装exe程序
2008/11/30 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
angular第三方包开发整理(小结)
2018/04/19 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
python实现大学人员管理系统
2019/10/25 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
python中delattr删除对象方法的代码分析
2020/12/15 Python
Django中ORM的基本使用教程
2020/12/22 Python
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
文明礼仪事迹材料
2014/01/09 职场文书
大学毕业自我鉴定范文
2014/02/03 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
Golang 并发编程 SingleFlight模式
2022/04/26 Golang