在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操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
Python中的random()方法的使用介绍
May 15 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
python抽取指定url页面的title方法
May 11 Python
python根据list重命名文件夹里的所有文件实例
Oct 25 Python
django主动抛出403异常的方法详解
Jan 04 Python
python图像和办公文档处理总结
May 28 Python
python脚本开机自启的实现方法
Jun 28 Python
python英语单词测试小程序代码实例
Sep 09 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 Python
opencv 分类白天与夜景视频的方法
Jun 05 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来检测proxy
2006/10/09 PHP
用header 发送cookie的php代码
2007/03/16 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
基于javascript的拖拽类封装详解
2019/04/19 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python将文本转换成图片输出的方法
2015/04/28 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
python dlib人脸识别代码实例
2019/04/04 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
Python unittest框架操作实例解析
2020/04/13 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
大专应届生个人简历的自我评价
2013/10/15 职场文书
经典的班主任推荐信
2013/10/28 职场文书
简短证婚人证婚词
2014/01/09 职场文书
考试不及格的检讨书
2014/01/22 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
五年级学生期末评语
2014/12/26 职场文书
表扬通报怎么写
2015/01/16 职场文书
创业计划书之养殖业
2019/10/11 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL