在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 相关文章推荐
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
python实现两张图片的像素融合
Feb 23 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
python代码区分大小写吗
Jun 17 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
pandas求平均数和中位数的方法实例
Aug 04 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 Python
Python软件包安装的三种常见方法
Jul 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
Yii中表单用法实例详解
2016/01/05 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
讲解Python中if语句的嵌套用法
2015/05/14 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
python实现的简单RPG游戏流程实例
2015/06/28 Python
python中列表和元组的区别
2017/12/18 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
Python any()函数的使用方法
2019/10/28 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
《桂花雨》教学反思
2014/04/12 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏