在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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
单链表反转python实现代码示例
Feb 08 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
Feb 17 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
Golang GBK转UTF-8的例子
Aug 26 Python
Pygame的程序开始示例代码
May 07 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
golang中的空接口使用详解
Mar 30 Python
Python 如何安装Selenium
May 06 Python
python画条形图的具体代码
Apr 20 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中webservice实现的简单架构方法及实例
2015/02/03 PHP
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
jQuery实现获取隐藏div高度的方法示例
2017/02/09 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
python2.7到3.x迁移指南
2018/02/01 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
英国排名第一的礼品体验公司:Red Letter Days
2018/08/16 全球购物
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
为什么要做架构设计
2015/07/08 面试题
大学课外活动总结
2014/07/09 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
收入证明范本
2015/06/12 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
详解Python类和对象内容
2021/06/22 Python
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android