Как заставить Django работать с неподдерживаемыми драйверами MySQL, такими как gevent-mysql или драйвер Concurrence MySQL?
Я заинтересован в запуске Django в рамках async, например Concurrence или gevent. Оба фреймворка имеют свой собственный драйвер async MySQL.
Проблема заключается в том, что Django официально поддерживает MySQLdb. Что мне нужно сделать, чтобы Django работал с драйверами MySQL, которые поставляются с gevent или Concurrence?
Есть ли пошаговое руководство, где я могу следовать? Является ли это важным делом?
Спасибо.
Ответы
Ответ 1
три ура для предложения @traviscline для pymysql. его предложение было основано на этом сообщении от mozilla. все, что требуется, это простой патч для вашего файла manage.py
#!/usr/bin/env python
+try:
+ import pymysql
+ pymysql.install_as_MySQLdb()
+except ImportError:
+ pass
изменение импорта в файле настроек и monkeypatch(), поскольку pymysql является чистым драйвером python.
travis отметил, что он тестирует совместимость, меняя импорт и запуская unittests для pymysql, mysqldb и myconnpy.
обратите внимание, что уже есть примеры более тонких деталей, чтобы следить за - но в целом это элегантное, поддерживаемое решение. я буду обновлять, когда я получу это в процессе производства!
Ответ 2
с базой данных с низкой задержкой, MySQLdb достаточно хорош, даже если используется с gevent. Несмотря на то, что он не является патчевым, он может достичь хорошей производительности за счет повторного использования соединения с базой данных и увеличения числа работников gevent. База данных тяжелая, и обычно вам не нужно создавать тысячи одновременных подключений, чтобы использовать ее производительность, а соотношение 1:1 рабочего к соединению - не очень плохой выбор. Но для кэша памяти это совершенно другая история.
Ответ 3
Мне удалось получить pymysql для работы с Django, выполнив следующие действия:
- Прокомментируйте блок try-except в начале файла base.py, где импортируется MySQLdb.
-
Добавьте следующие четыре строки в base.py
try:
import pymysql as Database
except ImportError:
pass
-
Как упоминалось в ссылке, опубликованной egbutter, перейдите в файл base.py и найдите-замените MySQLdb
на pymysql
в соответствующие части файла, то есть не беспокойтесь об изменении сообщений об ошибках (вы могли бы, но это до вас).
-
Сохраните base.py и запустите следующую команду из apt-местоположения, чтобы увидеть запуск сервера.
python manage.py runserver