在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遍历类中所有成员的方法
Mar 18 Python
Python实现复杂对象转JSON的方法示例
Jun 22 Python
Python实现JSON反序列化类对象的示例
Jan 31 Python
python 2.7.14安装图文教程
Apr 08 Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 Python
python2和python3在处理字符串上的区别详解
May 29 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
python实现中文文本分句的例子
Jul 15 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
django API 中接口的互相调用实例
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
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
js或css实现滚动广告的几种方案
2010/01/28 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
原生js实现购物车功能
2020/09/23 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
python测试驱动开发实例
2014/10/08 Python
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
Python正则表达式使用范例分享
2016/12/04 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
MYSQL支持事务吗
2013/08/09 面试题
幼儿园父亲节活动方案
2014/03/11 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python