para mysqldb mysqlclient python mysql database mysql-python mysql-connector

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.

  1. Hay MySQLdb

  2. Hay mysqlclient

  3. 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 biblioteca mysql-connector-c C funcione.

  • PyMySQL - PyMySQL puro de Python MySQL. Según el mysqlclient del mantenimiento de mysqlclient y PyMySQL , debe usar PyMySQL 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.
  • 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.