在Django的视图中使用数据库查询的方法


Posted in Python onJuly 16, 2015

在视图中也有笨方法可以从数据库中获取数据。 很简单: 用现有的任何 Python 类库执行一条 SQL 查询并对结果进行一些处理。

在本例的视图中,我们使用了 MySQLdb 类库(可以从 http://www.djangoproject.com/r/python-mysql/ 获得)来连接 MySQL 数据库,取回一些记录,将它们提供给模板以显示一个网页:

from django.shortcuts import render_to_response
import MySQLdb

def book_list(request):
  db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost')
  cursor = db.cursor()
  cursor.execute('SELECT name FROM books ORDER BY name')
  names = [row[0] for row in cursor.fetchall()]
  db.close()
  return render_to_response('book_list.html', {'names': names})

这个方法可用,但很快一些问题将出现在你面前:

    我们将数据库连接参数硬行编码于代码之中。 理想情况下,这些参数应当保存在 Django 配置中。

    我们不得不重复同样的代码: 创建数据库连接、创建数据库游标、执行某个语句、然后关闭数据库。 理想情况下,我们所需要应该只是指定所需的结果。

    它把我们栓死在 MySQL 之上。 如果过段时间,我们要从 MySQL 换到 PostgreSQL,就不得不使用不同的数据库适配器(例如 psycopg 而不是 MySQLdb ),改变连接参数,根据 SQL 语句的类型可能还要修改SQL 。 理想情况下,应对所使用的数据库服务器进行抽象,这样一来只在一处修改即可变换数据库服务器。 (如果你正在建立一个开源的Django应用程序来尽可能让更多人使用的话,这个特性是非常适当的。)

正如你所期待的,Django数据库层正是致力于解决这些问题。 以下提前揭示了如何使用 Django 数据库 API 重写之前那个视图。

from django.shortcuts import render_to_response
from mysite.books.models import Book

def book_list(request):
  books = Book.objects.order_by('name')
  return render_to_response('book_list.html', {'books': books})

我们将在本章稍后的地方解释这段代码。 目前而言,仅需对它有个大致的认识。

Python 相关文章推荐
Python深入学习之闭包
Aug 31 Python
python生成excel的实例代码
Nov 08 Python
Python中判断输入是否为数字的实现代码
May 26 Python
python读取Excel实例详解
Aug 17 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
python 同时读取多个文件的例子
Jul 16 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
python支持多线程的爬虫实例
Dec 21 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
python 牛顿法实现逻辑回归(Logistic Regression)
Oct 15 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 Python
Python 实现绘制子图及子图刻度的变换等问题
May 31 Python
详解Python的Django框架中的模版继承
Jul 16 #Python
Django中模版的子目录与include标签的使用方法
Jul 16 #Python
Django中使用locals()函数的技巧
Jul 16 #Python
Django框架中render_to_response()函数的使用方法
Jul 16 #Python
在Python的Django框架中加载模版的方法
Jul 16 #Python
Django框架下在视图中使用模版的方法
Jul 16 #Python
详解Django中的过滤器
Jul 16 #Python
You might like
php获取flash尺寸详细数据的方法
2016/11/12 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
使用Python写个小监控
2016/01/27 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
浅析python的Lambda表达式
2019/02/27 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python递归实现打印多重列表代码
2020/02/27 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
会议开场欢迎词
2014/01/15 职场文书
多媒体教室标语
2014/06/26 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
负责培养人意见
2015/06/05 职场文书
售房协议书范本
2015/08/11 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技