2011-08-28 13 views
31

Acabo de resolver algunos problemas en mi aplicación Django 1.3 utilizando PyMySQL en lugar de MySQLdb. Seguí este tutorial sobre cómo hacer el cambio: http://web-eng-help.blogspot.com/2010/09/install-mysql-5-for-python-26-and.html¿Qué es PyMySQL y cómo difiere de MySQLdb? ¿Puede afectar el despliegue de Django?

Ahora quiero saber qué es realmente PyMySQL y cómo es diferente de MySQLdb.

Lo estoy usando en localhost y luego lo subiré a algún servidor.

¿Está bien utilizar PyMySQL en localhost y en alojar lo que proporcionan? Como he cambiado "MySQLdb" en base.py e introspection.py a "PyMySQL", ¿tendré que subirlo al servidor después de cambiar estos archivos? O como son los archivos de Django, ya que Django ya estará cargado allí, ¿no importa mucho?

+1

'pymysql' es el puerto python puro del paquete' mysqldb' ('mysql-python'). Por lo tanto, 'pymysql' se puede instalar en cualquier sistema sin necesidad de un compilador de C. Instalar 'mysqldb' puede necesitar un compilador y en Windows puede producir un error (' error: no se puede encontrar vcvarsall.bat') si no tiene uno. – skjoshi

+0

Esta pregunta hubiera sido más útil si hubiera sido menos amplia.Te estás preguntando varias cosas: la diferencia entre las dos bibliotecas, cómo implementar PyMySQL en algún tipo de entorno de alojamiento compartido (del que no nos has contado nada y con el que, por lo tanto, no podemos ayudarte), y , más ampliamente, qué problemas hay que tener en cuenta al usar PyMySQL con Django. Esas son tres preguntas distintas y habría sido mejor preguntarlas como tales. –

+0

La pregunta fue si debería usar PyMySQL o no y tuve dos dudas de que está llamando a varias preguntas. – Hafiz

Respuesta

12

PyMySQL y MySQLdb son conectores de base de datos para Python, bibliotecas para habilitar los programas de Python para hablar con un servidor MySQL.

Normalmente, nunca subiría los archivos Django principales al implementar una aplicación. Si Django funciona bien en su servidor de implementación, definitivamente no necesita cambiar nada allí. El controlador DB está a un paso o dos por debajo del ORM incluso, y ciertamente ninguno de los códigos que ha escrito depende de cuál de estos está en uso.

9

Su primer punto:

Según pymysql wiki página:

MySQLdb, is a C extension module that has a reputation of being difficult to compile, especially if you're on a Mac. Additionally, end-users need to wait for new binaries to be compiled for each new release of Python, and MySQLdb will never run on Jython, IronPython, or PyPy (without something like cpyext or IronClad). We also maintain 100% compatibility between Python 2 and Python 3, so all advancements made on the 2.x trunk will be immediately available on Python 3.

Su segundo punto:

If django is working fine on your localhost, then it should be fine on your development.

+0

yah, pero mi punto es que si bien he cambiado MySQLdb a pymysql en esos dos archivos mencionados anteriormente que son de django, ¿creará un problema? ¿O django ya está allí en webhostings? ¿O pymysql está allí? – Hafiz

47

PyMySQL y MySQLdb proporcionan la misma funcionalidad - que son los dos conectores de base de datos. La diferencia está en la implementación donde MySQLdb es una extensión C y PyMySQL es puramente Python.

Hay algunas razones para tratar de PyMySQL:

  • podría ser más fácil de conseguir que se ejecuta en algunos sistemas
  • funciona con PyPy
  • se puede "vegetalizada" y trabaja con GEvent

La forma correcta de usarlo con Django es importarlo y decirle que se haga pasar por MySQLdb en su archivo de nivel superior, generalmente manage.py. Coloque el siguiente código en la parte superior de su manage.py (o cualquier archivo que llama cuando se inicia el servidor):

try: 
    import pymysql 
    pymysql.install_as_MySQLdb() 
except ImportError: 
    pass 
+1

Debo añadir que la versión oficial de PyMySQL no es (actualmente) compatible con Django 1.4 utilizando el método anterior. Hay un fork que parece funcionar en https://github.com/CMGS/PyMySQL si quieres probarlo. –

+0

Esto me ahorró mucho tiempo, ¡gracias! –

+5

Agregaría una razón más: para admitir Python 3 – Alveoli

0

Según mi experiencia que tuve dificultades en instalar "MySQL-python" - (MySQLdb) . Me hizo buscar más alternativas, así que encontré pymysql, y también se instaló fácilmente y funcionó al principio, como un amuleto. Así que sugeriría usar pymysql solo en lugar de MySQLdb.

Cuestiones relacionadas