如何让 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 Workbench 不受支持的操作系统 - Windows 7