【问题标题】:How to make Django work with unsupported MySQL drivers such as gevent-mysql or Concurrence's MySQL driver?如何让 Django 使用不受支持的 MySQL 驱动程序,例如 gevent-mysql 或 Concurrence 的 MySQL 驱动程序?
【发布时间】: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。

标签: mysql django asynchronous django-database gevent


【解决方案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,这不是问题。 stackoverflow.com/a/15315546/424380
  • 另外,上面提到的错误 668664(在父进程被杀死时杀死查询)对我来说在生产中从来都不是一个明显的问题。虽然该站点每天看到的请求不超过几千个,而我正在研究它。
  • 经过大量努力尝试让默认的 mysql 驱动程序在 Python 3.4 中与 Django 一起工作,这才奏效。谢谢!
  • 我在 OSX 10.11 上,使用 Mamp,这个解决方案适用于 Python 3.6 和 Django
【解决方案2】:

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

  1. 注释掉 base.py 文件开头的 try-except 块,这里导入了 MySQLdb。
  2. 将以下四行添加到base.py

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

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

    python manage.py runserver
    

【讨论】:

    猜你喜欢
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2013-10-09
    • 2012-07-20
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多