Así que he estado tratando de hacer una actualización de la base de datos con python y mientras configuraba todo el entorno de desarrollo, me encontré con estas tres cosas que me marearon.
hay mysqldb
Hay mysqlclient
¿Qué es cada uno de ellos, la diferencia y dónde usarlos? Gracias
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: conector mysql , un módulo integral de python que usa la API de MySQL sin dependencias de módulos C y solo se usan módulos estándar de python.
Así que ahora la pregunta se reduce a: mysqlclient vs mysql connector.
En cuanto a mí, optaría por una biblioteca compatible oficialmente, sin embargo, mysqlclient debería ser una buena opció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
Como una bifurcación del envoltorio C, requiere módulos 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.
Hay tres adaptadores MySQL para Python que se mantienen actualmente:
mysqlclient : con diferencia, el conector MySQL más rápido para CPython. Requiere la biblioteca mysql-connector-c C para funcionar.
PyMySQL : cliente MySQL de Python puro. De acuerdo con el mantenedor de mysqlclient y PyMySQL , debe usar PyMySQL si:
libmysqlclient por alguna razón. 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 desde PyPI (pero ahora está disponible a través de conda).
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.
Una gran cantidad de opciones proporcionadas por los usuarios. Un poco tarde para la fiesta. Pero mis 2 centavos están de acuerdo con la evaluación comparativa para la versión pypy 3.7.
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