在Django的视图中使用数据库查询的方法

在视图中也有笨方法可以从数据库中获取数据。 很简单: 用现有的任何 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})

我们将在本章稍后的地方解释这段代码。 目前而言,仅需对它有个大致的认识。

(0)

相关推荐

  • Django查询数据库的性能优化示例代码

    前言 Django数据层提供各种途径优化数据的访问,一个项目大量优化工作一般是放在后期来做,早期的优化是"万恶之源",这是前人总结的经验,不无道理.如果事先理解Django的优化技巧,开发过程中稍稍留意,后期会省不少的工作量. 现在有一张记录用户信息的UserInfo数据表,表中记录了10个用户的姓名,呢称,年龄,工作等信息. models文件 from django.db import models class Job(models.Model): title=models.Char

  • 在Django的模型中执行原始SQL查询的方法

    有时候你会发现Django数据库API带给你的也只有这么多,那你可以为你的数据库写一些自定义SQL查询. 你可以通过导入django.db.connection对像来轻松实现,它代表当前数据库连接. 要使用它,需要通过connection.cursor()得到一个游标对像. 然后,使用cursor.execute(sql, [params])来执行SQL语句,使用cursor.fetchone()或者cursor.fetchall()来返回记录集. 例如: >>> from django

  • Django中对数据查询结果进行排序的方法

    在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序. 那么,使用 order_by() 这个方法就可以搞定了. >>> Publisher.objects.order_by("name") [<Publisher: Apress>, <Publisher: O'Reilly>] 跟以前的 all() 例子差不多,SQL语句里多了指定排序的部分: SELECT id, name, address, city,

  • 在Django的视图中使用数据库查询的方法

    在视图中也有笨方法可以从数据库中获取数据. 很简单: 用现有的任何 Python 类库执行一条 SQL 查询并对结果进行一些处理. 在本例的视图中,我们使用了 MySQLdb 类库(可以从 http://www.djangoproject.com/r/python-mysql/ 获得)来连接 MySQL 数据库,取回一些记录,将它们提供给模板以显示一个网页: from django.shortcuts import render_to_response import MySQLdb def bo

  • 在Django的视图中使用form对象的方法

    在学习了关于Form类的基本知识后,你会看到我们如何把它用到视图中,取代contact()代码中不整齐的部分. 一下示例说明了我们如何用forms框架重写contact(): # views.py from django.shortcuts import render_to_response from mysite.contact.forms import ContactForm def contact(request): if request.method == 'POST': form =

  • Django视图之ORM数据库查询操作API的实例

    查询表记录 查询相关API 操作:models.表名.objects.方法() <BR>all(): 查询所有结果 filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个, 如果符合筛选条件的对象超过一个或者没有都会抛出错误. exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 values(*field): 返回一个ValueQuerySet--一个特殊的QuerySet

  • Django在视图中使用表单并和数据库进行数据交互的实现

    目录 写在前面 目结构及代码 项目结构 路由设置 数据库配置 定义模型 定义表单 修改模板 视图函数 记录感受 写在前面 博主近期有时间的话,一直在抽空看Django相关的项目,苦于没有web开发基础,对JavaScript也不熟悉,一直在从入门到放弃的边缘徘徊(其实已经放弃过几次了,如下图,一年前的笔记).总体感受web开发要比其他技术栈难,前后端技术都有涉及.如果没有实体项目支撑的话,很难学下去.但不管怎样,学习都是一件痛苦的事情,坚持下去总会有收获. 本博客记录的是<Django web

  • 在 Laravel 6 中缓存数据库查询结果的方法

    在加快应用程序速度方面,缓存可能是最有效的.Laravel 预先安装了缓存驱动程序.因此你可以直接使用 Redis, Memcached 或者使用本地文件进行缓存操作.Laravel 附带了此功能. 这一次,我们将讨论直接从模型缓存 Eloquent 查询,从而使数据库缓存变的轻而易举. 这个包可以在 GitHub 找到,此文档将介绍该应用程序的所有要点.但是,这篇文章,我仅仅介绍缓存和清除缓存的知识. 安装 可以通过 Composer 安装 $ composer require rennokk

  • Django中常用的查询数据方法及查询对象的条件详解

    (1)常用的查询方法: 1.获取所有记录: s = User.objects.all() 2.获取第一条数据: s = User.objects.first() 3.获取最后一条数据: s = User.objects.last() 关于二.三两个方法注意点: 对于QuerySet对象,我们也是可以通过下标取值获取对应的实例对象.如下所示--虽然这两个方法作用一致(获取到对应的实例对象),但是推荐使用(而且一般使用的)都是first()方法及last()方法. 原因--如果查询的数据不存在的话,

  • tp5(thinkPHP5)框架实现多数据库查询的方法

    本文实例讲述了tp5(thinkPHP5)框架实现多数据库查询的方法.分享给大家供大家参考,具体如下: 引言: 有时候一个管理后台,需要涉及到多个数据库.比如,商城管理.直播管理.消息管理等等,它们都有自己的数据库.这个时候,就需要去连接多个数据库,进行处理了.thinkphp可以支持多个数据库连接. 如何处理呢? 1.进行多个数据库的配置 默认会连接database.php中的数据库信息. <?php // +------------------------------------------

  • php+mysqli使用预处理技术进行数据库查询的方法

    本文实例讲述了php+mysqli使用预处理技术进行数据库查询的方法.分享给大家供大家参考.具体如下: 代码有些难度,需要基础知识比较扎实才能好理解,代码先放上来: 这里实现查询所有 id>5 的 id,title,contents值: 复制代码 代码如下: <?php $mysqli = new MySQLi("localhost","root","123456","liuyan"); if(!$mysqli){

  • MySql中使用正则表达式查询的方法

    正则表达式常用来检索和替换那些符合魔种模式的文本.例如从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户输入的某些敏感词汇等.Mysql 使用 REGEXP 关键字指定正则表达式的字符匹配模式. 1. 字符 '^' 查询以特定字符或字符串开头的记录 SELECT * FROM user WHERE email REGEXP '^a' 字符 '^' 匹配以特定字符或字符串开头的记录,以上语句查询邮箱以 a 开头的记录 2. 字符 ' 查询以特定字符或字符串结尾的记录 SELECT

  • 在Django的session中使用User对象的方法

    通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证. 当然了,Django 也提供了工具来处理这样的常见任务(就像其他常见任务一样). Django 用户认证系统处理用户帐号,组,权限以及基于cookie的用户会话. 这个系统一般被称为 auth/auth (认证与授权)系统. 这个系统的名称同时也表明了用户常见的两步处理. 我们需要 验证 (认证) 用户是否是他所宣称的用户(一

随机推荐