在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 client使用http post 到server端的代码
Feb 10 Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 Python
python自动翻译实现方法
May 28 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
Django-Rest-Framework 权限管理源码浅析(小结)
Nov 12 Python
对python:print打印时加u的含义详解
Dec 15 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
python打造爬虫代理池过程解析
Aug 15 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
详解python内置模块urllib
Sep 09 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
Sep 23 Python
详解Django中的FBV和CBV对比分析
Mar 01 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 根据IP地址控制访问的代码
2010/04/22 PHP
深入PHP异步执行的详解
2013/06/03 PHP
解析php多线程下载远程多个文件
2013/06/25 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
php实现的简单检验登陆类
2015/06/18 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python三元运算实现方法
2015/01/12 Python
对于Python中线程问题的简单讲解
2015/04/03 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
python3 线性回归验证方法
2019/07/09 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
python变量的作用域是什么
2020/05/26 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
python3排序的实例方法
2020/10/20 Python
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
如何高效率的查找一个月以内的数据
2012/04/15 面试题
C#基础面试题
2016/10/17 面试题
静心口服夜广告词
2014/03/20 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
软环境建设心得体会
2014/09/09 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
工商行政处罚决定书
2015/06/24 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS