我可以在带有 Python3.x 的 Django(dev 1.6.x) 上使用 MySQL 吗?

Posted

技术标签:

【中文标题】我可以在带有 Python3.x 的 Django(dev 1.6.x) 上使用 MySQL 吗?【英文标题】:Can I use MySQL on Django(dev 1.6.x) with Python3.x? 【发布时间】:2012-10-30 11:55:57 【问题描述】:

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

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

【问题讨论】:

您可能希望关注这张关于使用 Python 3 在 Django 上支持 MySQL 的票证:code.djangoproject.com/ticket/20025 到今天为止,这个功能必须被认为仍然是实验性的,需要在用于生产之前进行进一步测试.请考虑报告您的好或坏经历! 【参考方案1】:

我还在努力让 MySQL 与 Django 1.6 和 Python 3.3 一起工作;唯一有效的是切换到 PyMySQL。请参阅我的帖子 here

在下方添加答案

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

如何让它发挥作用:

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

    打开您的 Django 应用 __init__.py 并粘贴以下行:

    import pymysql
    pymysql.install_as_MySQLdb() 
    

    现在,打开 settings.py 并确保您的 DATABASE 属性如下所示:

    DATABASES = 
       'default': 
           'ENGINE': 'django.db.backends.mysql',
           'NAME': 'mydb',
           'USER': 'dbuser',
           'PASSWORD': 'dbpassword',
           'HOST': 'dbhost',
           'PORT': '3306'
        
    
    

    就是这样,您应该可以执行python manage.py syncdb 来初始化您的MySQL DB;请参阅下面的示例输出:

    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.
    ...
    

【讨论】:

为什么帖子被 -1'ed ?我的帖子的链接准确地解释了如何配置 settings.py 并使其工作。 我不是投反对票的人,但我认为那是因为您的答案基本上是一个仅链接的答案(如果链接被删除,答案中几乎没有什么用处)。请参阅How to Answer中的“为链接提供上下文”部分 好的,我就在这里转贴。该链接指向 *** 中的另一个位置 - 我只是不想在此处也将帖子翻倍。无论如何,谢谢 @morgan_il 您是否尝试过 Oracle MySQL 连接器? @mattblang 是的,我做到了——但没有工作。有一些关于如何修复我在此期间遇到的错误的建议,但所有这些建议都需要修改连接器代码,这不是最好的方法,最终它们都不起作用。【参考方案2】:

python 3 的 pymysql 不是 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 吗?

【讨论】:

我使用 python 3.2 和 django ('1.6.dev20121106091914') ,我测试了Mysql python3 并且在制作过程后不起作用,所以根据你的话,最好的方法是等待 django 支持 mysql ? 当我使用您的链接 (Mysql Py3) 时发生此错误:TypeError: 'use_unicode' is an invalid keyword argument for this function @alireza.m 您可能会觉得这很有帮助:nbensa.blogspot.com.ar/2013/03/python-3-django-and-mysql.html,请查看“我们快到了。让我们修补 Django。”部分。【参考方案3】:

多年来,我一直在等待 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 教程中剪切和粘贴模型,'python manage syncdb' 工作。

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

我的全文在这里: http://bunwich.blogspot.ca/2014/02/finally-mysql-connector-that-works-with.html

【讨论】:

这看起来不错,比 PyMySQL 更受支持。发现它们之间的任何差异/优点/缺点?【参考方案4】:

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

根据 Django 1.8 和 1.9 的文档,mysqlclient is the recommended driver:

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

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

MySQL 连接器/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

现在应该修好了。

【讨论】:

以上是关于我可以在带有 Python3.x 的 Django(dev 1.6.x) 上使用 MySQL 吗?的主要内容,如果未能解决你的问题,请参考以下文章

python3.x +django + nginx + uwsgi 搭建web服务

Python3.x:Django框架搭建(web应用框架)

Python3 安装Django

Django1.9 Python3.4出现Error loading MySQLdb

哪个数据库与 Django 和 Python 3 一起使用? [关闭]

我应该等待 Django 开始支持 Python 3 吗?