agon-mysql

Posts Tagged ‘mysql’

python3.3下实现django连接mysql

October 20th, 2013, Posted by: agon   

想了解一下django,发现虽然django最新版已经支持python3,但是dajango用来连接mysql的mysqldb,却支持python2.7。虽然有很多支持python3的mysql连接器,但是dajango不支持。好在9月份,mysql官方连接器的一个beta版,已经有支持dajango的模块了,使用它就可以在python3和django1.5环境下使用mysql了。

搭建环境

  • 操作系统;win8
  • python版本:pyton3.3
  • django版本:django-1.5.4
  • mysql版本: 5.6.11 MySQL Community Server (GPL)

请确保以上涉及到的软件都正常工作。

安装mysql连接器(Connector/Python)

下载安装文件:

官方下载 最新版的稳定版连接器和alpha版,两个都下载,或者直接点以下两个链接:
alpha版 稳定版

我用的是windows,linux环境的也有提供,请点上面官方页面,注意那个页面默认看的是Generally Available (GA) Releases,点它旁边的Development Releases才能看到alpha版下载信息。

安装下载文件:

之所以下两个版本,请看后面的常见问题。

  1. 安装alpha版,然后到\Lib\site-packages\mysql\connector安装目录下找到version.py,复制一份。
  2. 安装稳定版,同样在这个目录下删掉version.py,把复制的那一份改成这个名字。
  3. 编辑Lib\site-packages\mysql\connector\django目录下base.py,在第278行找到return cursor.statement.decode('utf-8')修改为return cursor

设置与测试:

在你django的project里打开seetyong.py,按照下面设置:【1】

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django', # 这里是关键填我们装的backend.
        'NAME': '填你的数据库名字',                      
        'USER': '用户名',
        'PASSWORD': '密码',
        'HOST': '', 
        'PORT': '端口号', 
    }
}

上面填好之后,在project的manage.py目录,打开命令行工具,运行python manage.py shell命令,如果进入shell环境,参考下面的命令来测试:

>>> from django.db import connection
>>> cursor = connection.cursor()

上面两行如果没错,说明数据库设置正常,连接器配置成功

>>> cursor.execute("select * from books_publisher")
>>> cursor.fetchone()

把上面的books_publisher换成你数据库里有数据的表名,如果fetchone()执行完,有数据返回说明连接器基本没什么问题,可以用于一般的学习了

安装期间及测试出现的问题及解决

  • 只安装alpha版,在数据库关闭连接时老是蹦出异常:

    刚开始时只安装了alpha版,发现在执行完一般的mysql脚本好老是蹦出异常,type错误好像是,即连接器close()关闭连接后,connection.py在执行__del__报错。而稳定版没问题,由于稳定版没有django模块,所以先装alpha版后增加django模块,再装稳定版,覆盖alpha的其他文件成稳定版的。

  • 在执行python manage.py shell时找不到version:

    这就是前面为什么要复制一分alpha版的version.py文件,因为稳定版的版本号会提示错误,里面知识版本号数字,替换不影响使用。

  • 在执行cursor.execute来selct数据库时提示编码错误:

    在从数据库里取数据时会提示以下错误:
    return cursor.statement.decode('utf-8')
    AttributeError: 'str' object has no attribute 'decode'

    修改方法如前文安装所述sup【2】

经过一番折腾,做了一个小实例,没发现什么问题,在学习环境中使用很方便,其实用postgresql可能更方便了。眼下随着支持python3的插件越来越多,觉得用python3学django正是时候。

Page 1 of 11