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
mysqlclient
deberí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-c
biblioteca C funcione.PyMySQL
- Cliente puro Python MySQL. Según el responsable de mantenimiento de ambosmysqlclient
yPyMySQL
, debe usarPyMySQL
si:libmysqlclient
por 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,
mysqlclient
es más rápido (a veces> 10 veces más rápido) que los clientes Python puros.fuente
PyMySQL
sigue siendo el camino a seguir si se usa PyPy.mysqlclient
es 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() - t
fuente