Por fin después de mucho luchar hemos encontrado la contestación de este atolladero que agunos usuarios de nuestro espacio han presentado. Si tienes alguna información que aportar no dudes en compartir tu comentario.
Solución:
MySQLdb es un envoltorio delgado de python alrededor del módulo C que implementa la API para la base de datos MySQL.
Hace algún tiempo se usó la versión MySQLDb1 del contenedor y ahora se considera un legado. Cuando MySQLDb1 comenzó a evolucionar a MySQLDb2 con correcciones de errores y compatibilidad con Python3, se bifurcó MySQLDb1 y así es como apareció mysqlclient, con correcciones de errores y compatibilidad con Python3. En resumen, ahora tenemos MySQLDb2 que no está listo para su uso en producción, MySQLDb1 como un controlador obsoleto y mysqlclient compatible con la comunidad con correcciones de errores y compatibilidad con Python3.
Ahora, para resolver ese lío, MySQL proporciona su propia versión del adaptador MySQL: el conector mysql, un módulo integral de Python que usa la API de MySQL con sin dependencias de módulos C y solo se utilizan módulos Python estándar.
Así que ahora la pregunta se reduce a: mysqlclient vs mysql connector.
En cuanto a mí, iría con una biblioteca con soporte oficial, sin embargo mysqlclient
debe ser una buena elección también. Ambos se están actualizando activamente con correcciones y nuevas funciones que puede ver mediante confirmaciones activas en los últimos días.
Nota: No tengo mucha experiencia con ellos, por lo que puede haber casos en los que uno u otro no se adapte a tus necesidades. Ambas bibliotecas siguen el estándar PEP-249, lo que significa que debería estar bien con al menos la funcionalidad básica en todas partes.
Instalación y Dependencias
- cliente mysql
Como una bifurcación del envoltorio de C, requiere módulos de C para trabajar con MySQL, que agrega archivos de encabezado de python para construir estas extensiones (léase python-dev). La instalación depende del sistema que use, solo asegúrese de conocer los nombres de los paquetes y poder instalarlos.
- conector mysql La documentación principal es bastante clara, sin embargo, debe tener en cuenta la dependencia de Protobuf C++ (para las versiones del conector mysql >= 2.2.3).
Hay tres adaptadores MySQL para Python que se mantienen actualmente:
-
mysqlclient
– Con mucho, el conector MySQL más rápido para CPython. Requiere elmysql-connector-c
Biblioteca C para trabajar. -
PyMySQL
– Cliente Python MySQL puro. Según el responsable de ambosmysqlclient
yPyMySQL
Deberías usarPyMySQL
si:- no puedes usar
libmysqlclient
por alguna razón. - Desea utilizar un socket con parche de mono de gevent o eventlet.
- No quieres hackear el protocolo mysql.
- no puedes usar
-
mysql-connector-python
– Conector MySQL desarrollado por el grupo MySQL de Oracle, también escrito íntegramente en Python. Su rendimiento parece ser el peor de los tres. Además, debido a algunos problemas de licencia, no puede descargarlo desde PyPI (pero ahora está disponible a través de conda).
Puntos de referencia
De acuerdo con los siguientes puntos de referencia, mysqlclient
es más rápido (a veces > 10 veces más rápido) que los clientes Python puros.
- Evaluación comparativa de controladores MySQL (Python 3.4)
- Evaluación PyMySQL
- Rendimiento de consulta Python MySQLdb vs mysql-connector
Una gran cantidad de opciones proporcionadas por los usuarios. Un poco tarde para la fiesta. Pero mi 2 centavos en adelante con la evaluación comparativa para la versión pypy 3.7.
Apéguese a mysqlclient si desea un acceso más rápido y un acceso repetitivo
MySQL Connector/Python: 23.096168518066406 [sec]
mysqlclient: 6.815327882766724 [sec]
PyMySQL: 24.616853952407837 [sec]
MySQL Connector/Python: 22.619106769561768 [sec]
mysqlclient: 6.607790231704712 [sec]
PyMySQL: 24.410773038864136 [sec]
Bucle… de la evaluación comparativa anterior…
def q100k(cur):
t = time.time()
for _ in range(100000):
cur.execute("SELECT 1,2,3,4,5,6")
res = cur.fetchall()
assert len(res) == 1
assert res[0] == (1, 2, 3, 4, 5, 6)
return time.time() - t
Si haces scroll puedes encontrar las acotaciones de otros programadores, tú asimismo tienes la habilidad mostrar el tuyo si te apetece.