在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 相关文章推荐
Django中几种重定向方法
Apr 28 Python
在Python中移动目录结构的方法
Jan 31 Python
对python 中class与变量的使用方法详解
Jun 26 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
Python完全识别验证码自动登录实例详解
Nov 24 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
Python opencv相机标定实现原理及步骤详解
Apr 09 Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
opencv 图像轮廓的实现示例
Jul 08 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 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
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
vue登录注册实例详解
2019/09/14 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
从零学python系列之从文件读取和保存数据
2014/05/23 Python
Python求解平方根的方法
2015/03/11 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
python跨文件使用全局变量的实现
2020/11/17 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
中学生自我鉴定
2014/02/04 职场文书
社区禁毒工作方案
2014/06/02 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
房屋维修协议书范本
2014/09/25 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
同学聚会通知书
2015/04/20 职场文书
人民调解协议书
2016/03/21 职场文书
JS数组的常用方法整理
2021/03/31 Javascript