如何让 Django 使用不受支持的 MySQL 驱动程序,例如 gevent-mysql 或 Concurrence 的 MySQL 驱动程序?

Posted

技术标签:

【中文标题】如何让 Django 使用不受支持的 MySQL 驱动程序,例如 gevent-mysql 或 Concurrence 的 MySQL 驱动程序?【英文标题】:How to make Django work with unsupported MySQL drivers such as gevent-mysql or Concurrence's MySQL driver? 【发布时间】:2011-02-07 20:32:21 【问题描述】:

我对在 Concurrence 或 gevent 等异步框架上运行 Django 很感兴趣。这两个框架都带有自己的异步 mysql 驱动程序。

问题是 Django 只官方支持 MySQLdb。我需要做什么才能使 Django 与 gevent 或 Concurrence 附带的 MySQL 驱动程序一起工作?

是否有我可以遵循的分步指南?这是一项重大事业吗?

谢谢。

【问题讨论】:

假设 gevent-mysql 的 API 与 MySQLdb 匹配,一个非常简单的自定义数据库后端将很容易编写和使用。我知道其他人会感兴趣,所以如果/当你做了这个,请分享。我敢打赌,#gevent on freenode 的人会提供帮助。 github.com/petehunt/PyMySQL 是一个纯python MySQLdb api 兼容的客户端库,Mozilla 将它与 gevent 一起用于 Firefox 同步服务器。您可以编写一个小型自定义数据库引擎(正如我在上面推荐的那样),也可以简单地使用这种方法:github.com/petehunt/PyMySQL/blob/master/pymysql/… 来修补 PyMySQL。 【参考方案1】:

为@traviscline 的建议与pymysql 一起欢呼三声。他的建议基于this post from mozilla。只需要simple patch to your manage.py file

#!/usr/bin/env python
+try:
+    import pymysql
+    pymysql.install_as_MySQLdb()
+except ImportError:
+    pass 

更改设置文件中的导入和monkeypatch(),因为pymysql 是一个纯python 驱动程序。

travis 提到他通过更改导入和运行 pymysql、mysqldb 和 myconnpy 的单元测试来测试兼容性。

请注意,已经有examples of finer details to watch out for - 但总的来说这是一个优雅、可维护的解决方案。当我在生产中运行时,我会更新!

【讨论】:

我收到一个Thing2Literal 错误(看起来不像是在 pymysql 中实现的?) 如果您使用的是最新版本的 mysqldb,这不是问题。 ***.com/a/15315546/424380 另外,上面提到的错误 668664(在父进程被杀死时杀死查询)对我来说在生产中从来都不是一个明显的问题。虽然该站点每天看到的请求不超过几千个,而我正在研究它。 经过大量努力尝试让默认的 mysql 驱动程序在 Python 3.4 中与 Django 一起工作,这才奏效。谢谢! 我在 OSX 10.11 上,使用 Mamp,这个解决方案适用于 Python 3.6 和 Django【参考方案2】:

我成功地让 pymysql 与 Django 一起工作:

    注释掉 base.py 文件开头的 try-except 块,这里导入了 MySQLdb。

    将以下四行添加到base.py

    try:
        import pymysql as Database
    except ImportError:
        pass
    

    正如egbutter 发布的链接中所述,转到base.py 文件并在文件的相关部分将MySQLdb 替换为pymysql,即不要费心更改错误消息(你可以,但这取决于你)。

    保存base.py,然后在apt位置运行以下命令查看服务器启动情况。

    python manage.py runserver
    

【讨论】:

以上是关于如何让 Django 使用不受支持的 MySQL 驱动程序,例如 gevent-mysql 或 Concurrence 的 MySQL 驱动程序?的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 PyPI 发布的包中测试不受支持的 Django 版本吗?

使用 MySQL 不受支持的语法播放框架演变

MySQL Workbench 不受支持的操作系统 - Windows 7

STM32中怎样让自己指定部分程序不受系统复位的影响?

+的不受支持的操作数类型:'RegexURLPattern'和'unicode'

如何轻松地将 Django 应用程序从 mySQL 转换为 PostgreSQL?