Как заставить Django работать с неподдерживаемыми драйверами MySQL, такими как gevent-mysql или драйвер MySQL Concurrence? - PullRequest
22 голосов
/ 14 апреля 2010

Я заинтересован в запуске Django в асинхронной среде, такой как Concurrence или gevent. Обе платформы поставляются со своим собственным асинхронным драйвером MySQL.

Проблема в том, что Django официально поддерживает только MySQLdb. Что мне нужно сделать, чтобы Django работал с драйверами MySQL, которые поставляются с Gevent или Concurrence?

Есть ли где-нибудь пошаговое руководство, которому я могу следовать? Это главное предприятие?

Спасибо.

Ответы [ 2 ]

36 голосов
/ 23 августа 2011

три ура за предложение @ traviscline пойти с pymysql . его предложение было основано на этой записи от mozilla . все, что нужно - это простое исправление для вашего файла manage.py

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

изменение импорта в вашем файле настроек и monkeypatch (), поскольку pymysql - это чистый драйвер python.

Трэвис упомянул, что он проверяет совместимость, изменяя импорт и выполняя юнит-тесты для pymysql, mysqldb и myconnpy.

обратите внимание, что уже есть примеры более мелких деталей, на которые стоит обратить внимание - но в целом это элегантное, поддерживаемое решение. я буду обновлять, когда я получу это работает в производстве!

0 голосов
/ 23 декабря 2013

Мне удалось заставить pymysql работать с Django, выполнив следующее:

  1. Закомментируйте блок try-exc в начале файла base.py , куда импортируется 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
    
...