在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 获取本机ip地址的两个方法
Feb 25 Python
python实现合并两个数组的方法
May 16 Python
Unicode和Python的中文处理
Mar 19 Python
Django自定义认证方式用法示例
Jun 23 Python
对python中return和print的一些理解
Aug 18 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
一篇文章教你用python画动态爱心表白
Nov 22 Python
PyCharm Community安装与配置的详细教程
Nov 24 Python
Pandas DataFrame求差集的示例代码
Dec 13 Python
python des,aes,rsa加解密的实现
Jan 16 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 注释规范
2012/03/29 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
Vue 解决多级动态面包屑导航的问题
2019/11/04 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
python中PIL安装简单教程
2016/04/21 Python
python调用百度语音识别api
2018/08/30 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
python字符串的index和find的区别详解
2020/06/20 Python
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
求职简历自荐信范文
2013/10/21 职场文书
2014年消防工作实施方案
2014/02/20 职场文书
青春雷锋观后感
2015/06/10 职场文书
小王子读书笔记
2015/06/29 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书