在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 相关文章推荐
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
Python3实现从文件中读取指定行的方法
May 22 Python
python调用java的jar包方法
Dec 15 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 Python
Python Selenium自动化获取页面信息的方法
Aug 31 Python
Python调用JavaScript代码的方法
Oct 27 Python
Python基于template实现字符串替换
Nov 27 Python
python中PyQuery库用法分享
Jan 15 Python
python3 sqlite3限制条件查询的操作
Apr 07 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 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 函数学习简单小结
2010/07/08 PHP
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
Python 元组(Tuple)操作详解
2014/03/11 Python
用Python实现协同过滤的教程
2015/04/08 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Python实现多属性排序的方法
2018/12/05 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
GWT的应用有哪两种部署模式
2012/12/21 面试题
模具数控专业自荐信
2014/01/27 职场文书
高校教师自荐信范文
2014/03/13 职场文书
班级出游活动计划书
2014/08/15 职场文书
旅游活动总结
2014/08/27 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
小学安全工作总结2015
2015/05/18 职场文书
Python一些基本的图像操作和处理总结
2021/06/23 Python