在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 25 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
Python元字符的用法实例解析
Jan 17 Python
python如何将图片转换为字符图片
Aug 19 Python
Python绘制3D图形
May 03 Python
Python实现的文本对比报告生成工具示例
May 22 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
python递归法实现简易连连看小游戏
Mar 25 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 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 什么是PEAR?(第三篇)
2009/03/19 PHP
PHP 命令行参数详解及应用
2011/05/18 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
python抓取网页图片并放到指定文件夹
2014/04/24 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
python 爬取疫情数据的源码
2020/02/09 Python
python 读取.nii格式图像实例
2020/07/01 Python
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
函授本科自我鉴定
2014/02/04 职场文书
司机检讨书
2014/02/13 职场文书
先进事迹演讲稿
2014/09/01 职场文书
委托公证书格式
2015/01/26 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python