在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多线程抓取天涯帖子内容示例
Apr 03 Python
在Python的Django框架中编写编译函数
Jul 20 Python
Python 中的lambda函数介绍
Oct 10 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
python实现动态创建类的方法分析
Jun 25 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
浅谈matplotlib默认字体设置探索
Feb 03 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 Python
Python中使用Lambda函数的5种用法
Apr 01 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
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
python的类方法和静态方法
2014/12/13 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
python文件读取失败怎么处理
2020/06/23 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
历史系毕业生自荐信
2013/10/28 职场文书
给学校建议书范文
2014/05/13 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
心得体会的写法
2014/09/05 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
先进教师事迹材料
2014/12/16 职场文书
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS
pandas进行数据输入和输出的方法详解
2022/03/23 Python
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技