• Django连接MySQL数据库的简单例子

    从最笨的方法开始
    服务器君一共花费 10.597 ms 进行了 2 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    前面一小节我们介绍了用 Django 建造网站的基本途径: 建立视图和 URLConf。视图负责处理一些主观逻辑,然后返回响应结果。

    但是这样的功能是远远不够的。大部分 Web 应用需要主观逻辑经常牵涉到与数据库的交互。数据库驱动网站在后台连接数据库服务器,从中取出一些数据,然后在 Web 页面用漂亮的格式展示这些数据。这个网站也可能会向访问者提供修改数据库数据的方法。

    由于先天具备 Python 简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站。

    在视图中进行数据库查询的笨方法

    先上一个例子:

    前面我们在视图中输出 HTML 的笨方法(通过在视图里对文本直接硬编码HTML),在视图中也有笨方法可以从数据库中获取数据。很简单: 用现有的任何 Python 类库执行一条 SQL 查询并对结果进行一些处理。

    在本例的视图中,我们使用了 MySQLdb 类库来连接 MySQL 数据库,取回一些记录,将它们提供给模板以显示一个网页:

    from django.shortcuts import render_to_response
    import MySQLdb
    
    def book_list(request):
        db = MySQLdb.connect(user='root', db='nowamagic', passwd='', host='localhost')
        cursor = db.cursor()
        cursor.execute('SELECT title FROM chika ORDER BY id')
        names = [row[0] for row in cursor.fetchall()]
        db.close()
        return render_to_response('list.html', {'names': names})
    

    然后修改下 urls.py:

    #from django.conf.urls import patterns, include, url
    from django.conf.urls.defaults import *
    from django.views.static import *
    from django.conf import settings
    from PythonProject.views import book_list
    # Uncomment the next two lines to enable the admin:
    from django.contrib import admin
    admin.autodiscover()
    
    urlpatterns = patterns('',
        # Examples:
        #url(r'^$', 'PythonProject.views.home', name='home'),
        #url(r'^PythonProject/', include('PythonProject.foo.urls')),
    
        # Uncomment the admin/doc line below to enable admin documentation:
        url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    
        # Uncomment the next line to enable the admin:
        url(r'^admin/', include(admin.site.urls)),
    
        ('^book_list/$', book_list),
    )
    

    再简单设计一下模板文件 list.html:

    <html>
    <head>
    <title>简明现代魔法</title>
    <body>
    	<div>{{names}}</div>
    </body>
    </head>
    </html>
    

    现在我们访问 http://127.0.0.1:8000/book_list/,程序输出:

    ['chika']
    

    如果你要测试,可以自己先建立一个测试用的数据表。

    点评

    这个方法虽然可用,但很快一些问题将出现在你面前:

    • 我们将数据库连接参数硬行编码于代码之中。 理想情况下,这些参数应当保存在 Django 配置中。
    • 我们不得不重复同样的代码: 创建数据库连接、创建数据库游标、执行某个语句、然后关闭数据库。 理想情况下,我们所需要应该只是指定所需的结果。
    • 它把我们栓死在 MySQL 之上。 如果过段时间,我们要从 MySQL 换到 PostgreSQL,就不得不使用不同的数据库适配器(例如 psycopg 而不是 MySQLdb ),改变连接参数,根据 SQL 语句的类型可能还要修改SQL 。 理想情况下,应对所使用的数据库服务器进行抽象,这样一来只在一处修改即可变换数据库服务器。 (如果你正在建立一个开源的Django应用程序来尽可能让更多人使用的话,这个特性是非常适当的。)

    这些都是存在的问题,后面我们会介绍如何解决这些问题。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [Python程序设计] Django与表单 4 个条目
  2. [PHP程序设计] httpd.conf设置相关 3 个条目
  3. [数据结构] 图的定义 1 个条目
  4. [Python程序设计] Tornado背景知识介绍 4 个条目
  5. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
  6. [C语言程序设计] C语言里的全局变量 2 个条目
  7. [移动开发] Android Studio的使用技巧 4 个条目
  8. [Python程序设计] Tornado 服务器环境配置 3 个条目
  9. [移动开发] Android与SQLite数据库 7 个条目
  10. [Python程序设计] urls.py设置技巧 8 个条目
  11. [移动开发] Layout_weight属性解析 5 个条目
  12. [Python程序设计] Django 入门知识浅介 10 个条目
窗口 -- [资讯]