Come rendere il lavoro Django con i driver di MySQL non supportati, come gevent-mysql o driver MySQL di Concurrence?

StackOverflow https://stackoverflow.com/questions/2636536

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.

È stato utile?

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:

  1. Commento il try-except blocco all'inizio del base.py file, dove viene importato MySQLdb.
  2. Aggiungere le seguenti quattro linee di base.py

    try:
        import pymysql as Database
    except ImportError:
        pass
    
  3. Come menzionato nel link che egbutter pubblicato, passare al file base.py e find-sostituzione MySQLdb con pymysql a parti rilevanti del file, vale a dire non preoccupatevi cambiare i messaggi di errore (si potrebbe, ma che sta a voi).

  4. Salva base.py, ed eseguire il seguente comando dal percorso in grado di vedere il server si avvia.

    python manage.py runserver
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top