在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处理python编码问题
Mar 13 Python
跟老齐学Python之变量和参数
Oct 10 Python
简单介绍Python中利用生成器实现的并发编程
May 04 Python
Python functools模块学习总结
May 09 Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
python 生成器协程运算实例
Sep 04 Python
python定时检测无响应进程并重启的实例代码
Apr 22 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
python爬虫之利用selenium模块自动登录CSDN
Apr 22 Python
关于python类SortedList详解
Sep 04 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函数)
2006/10/09 PHP
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
JS 统计时间
2021/03/09 Javascript
js类 from qq
2006/11/13 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
js函数排序的实例代码
2013/07/01 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
python url 参数修改方法
2018/12/26 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
python实现小球弹跳效果
2019/05/10 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
财经学院自荐信范文
2014/02/02 职场文书
诚信考试承诺书
2014/03/27 职场文书
运动会的口号
2014/06/09 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
靠谱的活动总结
2019/04/16 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸