Donc, j'ai essayé de faire une mise à jour de base de données avec python et en configurant tout l'environnement de développement, je suis tombé sur ces trois choses qui m'ont donné le vertige.
Il y a MySQLdb
Il y a mysqlclient
Quelle est chacune d'entre elles, quelle est la différence et où les utiliser? Merci
MySQLdb est un fin python encapsuleur autour du module C qui implémente l'API pour la base de données MySQL.
Il y avait une version MySQLDb1 de wrapper utilisée il y a quelque temps et elle est maintenant considérée comme un héritage. Alors que MySQLDb1 commençait à évoluer vers MySQLDb2 avec corrections de bugs et support Python3, un MySQLDb1 était créé et voici comment mysqlclient est apparu, avec corrections de bug et support Python3. En résumé, nous avons maintenant MySQLDb2 qui n'est pas prêt pour une utilisation en production, MySQLDb1 en tant que pilote obsolète et une communauté prise en charge par mysqlclient avec des correctifs de bogues et un support Python3.
Maintenant, pour résoudre ce désordre, MySQL fournit sa propre version de l'adaptateur MySQL - connecteur mysql , un module python tout-en-un qui utilise l'API MySQL avec pas de dépendances des modules C et uniquement les modules standard python utilisés.
Alors maintenant, la question se résume à: mysqlclient vs mysql connector.
Pour ma part, je choisirais une bibliothèque officiellement prise en charge, mais mysqlclient
devrait également être un bon choix. Tous deux sont activement mis à jour avec des correctifs et de nouvelles fonctionnalités que vous pouvez voir grâce aux validations actives des derniers jours.
Remarque: je n'avais pas beaucoup d'expérience avec eux, il est donc possible que l'un ou l'autre ne réponde pas à vos besoins. Les deux bibliothèques suivent PEP-249 ce qui signifie que vous devriez pouvoir utiliser au moins une fonctionnalité de base partout.
Installation et dépendances
En tant que fork de C, il nécessite que les modules C travaillent avec MySQL, ce qui ajoute les fichiers d'en-tête python pour construire ces extensions (lisez python-dev). L'installation dépend du système que vous utilisez. Assurez-vous de connaître le nom des packages et pouvez les installer.
Il y a trois adaptateurs MySQL pour Python qui sont actuellement maintenus:
mysqlclient
- De loin le connecteur MySQL le plus rapide pour CPython. Nécessite la bibliothèque _mysql-connector-c
_ C pour fonctionner.
PyMySQL
- Pure Python client MySQL. Selon le responsable de mysqlclient
et de PyMySQL
, vous devez utiliser PyMySQL
si:
libmysqlclient
pour une raison quelconque.mysql-connector-python
- Connecteur MySQL développé par le groupe MySQL chez Oracle, également écrit entièrement en Python. Sa performance semble être la pire des trois. De plus, en raison de problèmes de licence, vous ne pouvez pas le télécharger à partir de PyPI (mais il est maintenant disponible via conda).
Selon les tests suivants, mysqlclient
est plus rapide (parfois> 10 fois plus vite) que les clients purs Python.
Beaucoup d'options fournies par les utilisateurs. Petit tard pour faire la fête. Mais mon 2 cents dans avec l'analyse comparative pour la version 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]
Boucle ... de l'analyse comparative précédente ...
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