39

我使用 git repo 中的 Django dev(1.6.x) 并且我想使用 MySQL,但是在settings.py文件上无法设置 MySQL,因为 python3 和 Django 不支持 MySQL,所以我在 python3.x 上使用 pymysql 包没有任何问题,但是在 Django 中也无法设置settings.py

我可以在带有 python3 的 django 上使用 mysql(或 pymysql 或?)吗?

4

4 回答 4

75

我还努力让 MySQL 与 Django 1.6 和 Python 3.3 一起工作。唯一有效的是切换到 PyMySQL。在这里查看我的帖子

在下面添加答案

我的环境:Windows 上的 OSX 10.9、Python 3.3.3、Django 1.6.1、PyMySQL 0.6.1、MySQL Server 5.5

如何使其工作:

  1. 安装 PyMySQL 0.6.1 版本(https://github.com/PyMySQL/PyMySQL/):您可以使用 pip 安装它,即:pip install PyMySQL或手动下载包;他们的网站上有一个很好的文档说明如何做到这一点。

  2. 打开您的 Django App __init__.py并粘贴以下行:

    import pymysql
    pymysql.install_as_MySQLdb() 
    
  3. 现在,打开settings.py并确保您的 DATABASE 属性如下所示:

    DATABASES = {
       'default': {
           'ENGINE': 'django.db.backends.mysql',
           'NAME': 'mydb',
           'USER': 'dbuser',
           'PASSWORD': 'dbpassword',
           'HOST': 'dbhost',
           'PORT': '3306'
        }
    }
    
  4. 就是这样,你应该能够执行python manage.py syncdb来初始化你的 MySQL 数据库;请参阅下面的示例输出:

    Creating tables ...
    Creating table django_admin_log
    Creating table auth_permission
    Creating table auth_group_permissions
    ...
    ...
    Creating table socialaccount_socialtoken
    
    You just installed Django's auth system, which means you don't have any superusers defined.
    ...
    
于 2014-01-28T20:23:42.173 回答
7

pymysql for python 3 不是 Django DB 后端,但是有证据表明,在Django Python 3 MySQL backend changes中,已经进行了一些工作,将 MySQL 后端移植为 Python 3 兼容。

其他页面显示 Django 1.5 提供的 MySQL 后端适用于 Python 3: Django MySQL Works on Python 3.2.2

然而,Python 2.x (mysql-python) 上可用的默认 MySQL 包装器不支持 Python 3。我怀疑MySQL Python 3上的包兼容,你可以试一试。

还要确保您使用 Python 3.2 或 3.3 或更高版本运行 Django。不支持 Python 3.0。

如果在这些检查后仍然无法正常工作,请发布您的 DATABASES 设置以防出现问题。

另外,我在 Django 存储库中找不到任何高于 Django 1.5 的内容,你确定它是 1.6.x 吗?

于 2012-11-10T16:56:08.427 回答
7

我一直在等待 django 和 python 3.x 对 mysql 的支持,最后有一个官方兼容的引擎可以让你做到这一点。

http://dev.mysql.com/doc/connector-python/en/connector-python-django-backend.html

我使用 python 3 创建了一个 virtualenv,并且能够使用上面链接中的数据库特定设置。

DATABASES = {
    'default': {
        'NAME': 'mydatabase',
        'ENGINE': 'mysql.connector.django',
        'USER': 'mydbuser',
        'PASSWORD': 'mydbpassword',
        'OPTIONS': {
          'autocommit': True,
        },
    }
}

剪切并粘贴 Django Poll Tutorial 中的模型,“python manage syncdb”工作。

更多测试看整个 ORM 是否支持这个连接器。

我在这里写完整:http: //bunwich.blogspot.ca/2014/02/finally-mysql-connector-that-works-with.html

于 2014-02-12T22:00:15.810 回答
6

我通过这个解决了这个问题:

根据 Django 1.8 和 1.9 的文档,mysqlclient是推荐的驱动程序

MySQLdb是一个由 Andy Dustman 开发和支持十多年的原生驱动程序。

mysqlclient是 MySQLdb 的一个分支,它特别支持 Python 3,可以用作 MySQLdb 的替代品。在撰写本文时,这是将 MySQL 与 Django 一起使用的推荐选择。

MySQL Connector/Python是来自 Oracle 的纯 Python 驱动程序,不需要 MySQL 客户端库或标准库之外的任何 Python 模块。

所以,我安装了mysqlclient

sudo pip install mysqlclient

在 settings.py 中配置数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydjango',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '3306'
    }
}

但是当我./manage.py syncdb用于测试时,我收到一条错误消息:

_mysql.so not found

要解决此问题,请添加

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

~/.bashrc

然后运行:

source ~/.bashrc

现在应该修好了。

于 2015-06-26T22:57:41.717 回答