Tenho tentado fazer algumas atualizações de banco de dados com python e, ao configurar todo o ambiente de desenvolvimento, me deparei com essas três coisas que me deixaram tonto.
Existe MySQLdb
Existe mysqlclient
- E então há um python do conector mysql
Qual é cada um deles, a diferença e onde usá-los? obrigado
Respostas:
MySQLdb é um wrapper fino de python em torno do módulo C que implementa API para banco de dados MySQL.
Houve MySQLDb1 versão de fardos usados há algum tempo e agora ele é considerado como um legado. Como MySQLDb1 começou a evoluir para MySQLDb2 com correções de bugs e suporte a Python3, um MySQLDb1 foi bifurcado e aqui está como mysqlclient apareceu, com correções de bugs e suporte a Python3. Resumindo, agora temos MySQLDb2 que não está pronto para uso em produção, MySQLDb1 como um driver desatualizado e um mysqlclient suportado pela comunidade com correções de bugs e suporte Python3.
Agora, para resolver essa bagunça, o MySQL fornece sua própria versão do adaptador MySQL - conector mysql , um módulo python completo que usa a API MySQL sem dependências de módulos C e apenas módulos python padrão usados.
Portanto, agora a questão se resume a: mysqlclient vs mysql connector.
Quanto a mim, eu escolheria uma biblioteca com suporte oficial, mas também
mysqlclient
deve ser uma boa escolha. Ambos estão sendo ativamente atualizados com correções e novos recursos que você pode ver por commits ativos nos últimos dias.Nota: Eu não tinha muita experiência com eles, então pode haver casos em que um ou outro não atenda às suas necessidades. Ambas as bibliotecas seguem o padrão PEP-249, o que significa que você deve estar bem com pelo menos a funcionalidade básica em todos os lugares.
Instalação e Dependências
Como um fork do wrapper C, ele requer módulos C para trabalhar com MySQL, que adiciona arquivos de cabeçalho python para construir essas extensões (leia python-dev). A instalação depende do sistema que você usa, apenas certifique-se de conhecer os nomes dos pacotes e de poder instalá-los.
fonte
Existem três adaptadores MySQL para Python que são mantidos atualmente:
mysqlclient
- De longe o conector MySQL mais rápido para CPython. Requer amysql-connector-c
biblioteca C para funcionar.PyMySQL
- Cliente Python MySQL puro. De acordo com o mantenedor de ambosmysqlclient
ePyMySQL
, você deve usarPyMySQL
se:libmysqlclient
por algum motivo.mysql-connector-python
- Conector MySQL desenvolvido pelo grupo MySQL da Oracle, também escrito inteiramente em Python. Seu desempenho parece ser o pior dos três. Além disso, devido a alguns problemas de licenciamento, você não pode baixá-lo do PyPI (mas agora está disponível através do conda).Benchmarks
De acordo com os seguintes benchmarks,
mysqlclient
é mais rápido (às vezes> 10x mais rápido) do que os clientes Python puros.fonte
PyMySQL
ainda é o caminho a percorrer se usar o PyPy.mysqlclient
é o conector padrão usado pelo sqlalchemy quando o URL do seu banco de dados começa commysql://...
. Para usarPyMySQL
, comece seu URL commysql+pymysql://...
. Para usarmysql-connector-python
, comece seu URL commysql+mysqlconnector://...
. Veja a documentação do sqlalchemy para mais informações.Use mysqlclient se quiser um acesso mais rápido e 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]
Loop ... do benchmarking 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
fonte