在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中引用与复制用法实例分析
Jun 04 Python
Python3使用requests发闪存的方法
May 11 Python
Python爬取当当、京东、亚马逊图书信息代码实例
Dec 09 Python
详解python里的命名规范
Jul 16 Python
flask中的wtforms使用方法
Jul 21 Python
Django添加sitemap的方法示例
Aug 06 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
Django框架设置cookies与获取cookies操作详解
May 27 Python
Pytorch 多维数组运算过程的索引处理方式
Dec 27 Python
Python之Django自动实现html代码(下拉框,数据选择)
Mar 13 Python
Python+uiautomator2实现自动刷抖音视频功能
Apr 29 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 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
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
php如何获取Http请求
2020/04/30 PHP
网页打开自动最大化的js代码
2012/08/22 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python strip lstrip rstrip使用方法
2008/09/06 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
Python中的TCP socket写法示例
2018/05/11 Python
python计算两个数的百分比方法
2018/06/29 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
python字符串Intern机制详解
2019/07/01 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
新闻记者个人求职的自我评价
2013/11/28 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
总会计师岗位职责
2014/02/19 职场文书
学校火灾防控方案
2014/06/09 职场文书
航空学院求职信
2014/06/11 职场文书
幼师小班个人总结
2015/02/12 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript