Así que he estado tratando de actualizar la base de datos con Python y mientras configuraba todo el entorno de desarrollo, encontré estas tres cosas que me marearon.
Hay MySQLdb
Hay mysqlclient
- Y luego hay un conector de mysql python
¿Cuál es cada uno de ellos, la diferencia y dónde usarlos? Gracias

Respuestas:
MySQLdb es una envoltura delgada de Python alrededor del módulo C que implementa API para la base de datos MySQL.
Hace algún tiempo se utilizó la versión MySQLDb1 del contenedor 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 su uso en producción, MySQLDb1 como un controlador desactualizado y un mysqlclient apoyado por la comunidad con correcciones de errores y soporte para Python3.
Ahora, para resolver ese lío, MySQL proporciona su propia versión del adaptador MySQL: conector mysql , un módulo de Python todo incluido que usa la API de MySQL sin dependencias de módulos C y solo se usan módulos de Python estándar.
Así que ahora la pregunta se reduce a: mysqlclient vs conector mysql.
En cuanto a mí, optaría por una biblioteca con soporte oficial, sin embargo, también
mysqlclientdebería ser una buena opción. Ambos se están actualizando activamente con correcciones y nuevas funciones que puede ver en las 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 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
Como una bifurcación de la envoltura de C, requiere que los módulos de C funcionen con MySQL, lo 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 de poder instalarlos.
fuente
Hay tres adaptadores MySQL para Python que se mantienen actualmente:
mysqlclient- Con mucho, el conector MySQL más rápido para CPython. Requiere que lamysql-connector-cbiblioteca C funcione.PyMySQL- Cliente puro Python MySQL. Según el responsable de mantenimiento de ambosmysqlclientyPyMySQL, debe usarPyMySQLsi:libmysqlclientpor alguna razón.mysql-connector-python- Conector MySQL desarrollado por el grupo MySQL en Oracle, también escrito íntegramente en Python. Su desempeño 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).Benchmarks
De acuerdo con los siguientes puntos de referencia,
mysqlclientes más rápido (a veces> 10 veces más rápido) que los clientes Python puros.fuente
PyMySQLsigue siendo el camino a seguir si se usa PyPy.mysqlclientes el conector predeterminado que usa sqlalchemy cuando la URL de su base de datos comienza conmysql://.... Para usarPyMySQL, comience su URL conmysql+pymysql://.... Para usarmysql-connector-python, comience su URL conmysql+mysqlconnector://.... Consulte los documentos de sqlalchemy para obtener más información.Apéguese a mysqlclient si desea un acceso más rápido y 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() - tfuente