Come rendere il lavoro Django con i driver di MySQL non supportati, come gevent-mysql o driver MySQL di Concurrence?
-
26-09-2019 - |
Domanda
Mi interessa in esecuzione Django su un quadro asincrona come la Concurrence o gevent. Entrambi i quadri sono dotati di un proprio driver asincrono MySQL.
Il problema è Django supporta ufficialmente solo MySQLdb. Che cosa devo fare per far funzionare Django con i driver di MySQL che vengono con gevent o Concurrence?
C'è un passo-passo guida da qualche parte che posso seguire? Si tratta di una grande impresa?
Grazie.
Soluzione
Evviva @ di traviscline suggerimento per andare con pymysql . il suo suggerimento era basato su questo post da mozilla . tutto quello che serve è un semplice patch al file manage.py
#!/usr/bin/env python
+try:
+ import pymysql
+ pymysql.install_as_MySQLdb()
+except ImportError:
+ pass
cambiando l'importazione nel file di impostazioni, e monkeypatch () in quanto pymysql è un driver di pitone puro.
Travis detto che egli prova per la compatibilità cambiando le importazioni ed eseguendo i Unittests per pymysql, MySQLdb e myconnpy.
Si noti che ci sono già esempi di più fini dettagli a cui prestare attenzione - ma nel complesso si tratta di una elegante, soluzione mantenibile. Io aggiornerò quando ottengo questo correre in produzione!
Altri suggerimenti
sono riuscito a ottenere pymysql a lavorare con Django nel seguente modo:
- Commento il try-except blocco all'inizio del base.py file, dove viene importato MySQLdb.
-
Aggiungere le seguenti quattro linee di base.py
try: import pymysql as Database except ImportError: pass
-
Come menzionato nel link che egbutter pubblicato, passare al file base.py e find-sostituzione
MySQLdb
conpymysql
a parti rilevanti del file, vale a dire non preoccupatevi cambiare i messaggi di errore (si potrebbe, ma che sta a voi). -
Salva base.py, ed eseguire il seguente comando dal percorso in grado di vedere il server si avvia.
python manage.py runserver