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

作者:goldensun 时间:2024-01-14 20:03:20 

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

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

标签:Django,数据库
0
投稿

猜你喜欢

  • golang API请求队列的实现

    2024-03-11 16:39:50
  • mysql 队列 实现并发读

    2024-01-14 21:16:26
  • ASP环境下邮件列表功能的实现

    2007-10-03 14:25:00
  • python闭包与引用以及需要注意的陷阱

    2022-12-13 16:01:15
  • MYSQL5 下的兼容说明(my.ini my.conf)

    2008-02-23 10:13:00
  • Python内置的字符串处理函数详细整理(覆盖日常所用)

    2023-10-10 22:46:36
  • 微信小程序开发之数据存储 参数传递 数据缓存

    2024-04-19 09:49:44
  • python 利用栈和队列模拟递归的过程

    2023-12-14 14:08:12
  • python django入门

    2022-05-10 02:46:19
  • 一些SQL查询语法参考

    2007-10-14 11:56:00
  • PHP CURL CURLOPT参数说明(curl_setopt)

    2023-11-14 19:06:44
  • 名片管理系统python版

    2021-08-06 01:50:15
  • Python监控服务器实用工具psutil使用解析

    2021-10-14 03:16:24
  • 微信支付、支付宝支付等常用第三方支付通道接口手续费对比

    2022-01-29 12:48:14
  • 最新anaconda安装配置教程

    2021-07-17 05:05:34
  • Go语言实现的web爬虫实例

    2023-07-21 02:35:57
  • python虚拟环境迁移方法

    2021-09-13 07:52:51
  • 如何通过Python收集MySQL MHA 部署及运行状态信息的功能

    2024-01-13 22:14:44
  • Python如何读写JSON格式数据

    2022-05-20 17:42:05
  • MySQL多实例配置方案

    2024-01-14 12:55:49
  • asp之家 网络编程 m.aspxhome.com