mysqldb - python mysql
¿Cuál es la diferencia entre MySQLdb, mysqlclient y MySQL connector/Python? (3)
Muchas opciones proporcionadas por los usuarios. Poco tarde para la fiesta. Pero mis 2 centavos en adelante con el benchmarking para la versión pypy 3.7.
Apéguese a mysqlclient si desea un acceso más rápido y 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
Así que he estado tratando de hacer una actualización de la base de datos con Python y al configurar todo el entorno de desarrollo, me encontré con estas tres cosas que me marearon.
-
Hay MySQLdb
-
Hay mysqlclient
- Y luego hay un conector MySQL Python
¿Cuál es cada uno de ellos, la diferencia y dónde usarlos? Gracias
Hay adaptadores MySQL para Python que se mantienen actualmente:
-
mysqlclient
: con mucho, el conector MySQL más rápido para CPython. Requiere que la bibliotecamysql-connector-c
C funcione. -
PyMySQL
-PyMySQL
puro de Python MySQL. Según elmysqlclient
del mantenimiento demysqlclient
yPyMySQL
, debe usarPyMySQL
si:-
No puede usar
libmysqlclient
por alguna razón. - Desea utilizar el zócalo monoparche de gevent o eventlet.
- No quieres hackear el protocolo mysql.
-
No puede usar
-
mysql-connector-python
: conector MySQL desarrollado por el grupo MySQL en Oracle, también escrito completamente en Python. Su rendimiento parece ser el peor de los tres. Además, debido a algunos problemas de licencia, no puede descargarlo de 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.
MySQLdb es un contenedor delgado de Python alrededor del módulo C que implementa API para la base de datos MySQL.
Hubo MySQLDb1 versión de MySQLDb1 de wrapper utilizada hace algún tiempo y ahora se considera un legado. Cuando MySQLDb1 comenzó a evolucionar a MySQLDb2 con correcciones de errores y soporte para Python3, se bifurcó un MySQLDb1 y así es como apareció mysqlclient , con correcciones de errores y soporte para Python3. En resumen, ahora tenemos MySQLDb2 que no está listo para uso de producción, MySQLDb1 como un controlador desactualizado y un cliente mysqlclient compatible con la comunidad con correcciones de errores y soporte para Python3.
Ahora, para resolver ese desastre, MySQL proporciona su propia versión del adaptador MySQL: conector mysql , un módulo Python todo en uno que usa la API MySQL sin dependencias de módulos C y solo se usan módulos Python estándar.
Entonces ahora la pregunta se reduce a: mysqlclient vs mysql connector.
En cuanto a mí, iría con una biblioteca oficialmente compatible, sin embargo,
mysqlclient
debería ser una buena opción.
Ambos se están actualizando activamente con correcciones y nuevas características que puede ver mediante confirmaciones activas en los últimos días.
Nota: no tenía mucha experiencia con ellos, por lo que puede haber casos en que uno u otro no satisfaga sus 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
- mysqlclient
Como una bifurcación de C wrapper, requiere módulos C para trabajar con MySQL, que agrega archivos de encabezado de python para construir estas extensiones (lea python-dev). La instalación depende del sistema que utilice, solo asegúrese de conocer los nombres de los paquetes y poder instalarlos.
- La documentación principal del conector mysql es bastante clara, sin embargo, debe tener en cuenta la dependencia de Protobuf C ++ (para versiones de conector mysql > = 2.2.3 ).