MySQL-drivers (Python)
Inventaris
Er bestaan diverse MySQL-drivers. Welke is goed genoeg? Waarom dit geen non-issue is: Installatie wil maar niet goed lukken. Vandaar dat het de moeite waard is, om effe wat langer bij deze vraag stil te staan.
Ik wil SQLAlchemy gebruiken als ORB. Deze voorbeeldcode laat zien welke drivers in ieder geval ondersteund worden (ik kan me trouwens goed voorstellen dat het driver-onafhankelijk is):
# MySQLdb engine = create_engine('mysql://scott:tiger@localhost/foo') # mysql-python engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo') # MySQL-connector-python engine = create_engine('mysql+mysqlconnector://scott:tiger@localhost/foo') # OurSQL engine = create_engine('mysql+oursql://scott:tiger@localhost/foo')
MySQLdb
- Veel-gebruikt, maar schijnt complicaties te geven tijdens installatie ivm. externe afhankelijkheden [1]
- Schijnt dood te zijn (bron uit 2016)
- https://pypi.org/project/MySQL-python
MySQL-Connector-Python
- Veelbelovend, 100% Python (dus bv. geen C-bibliotheken), en afkomstig van Oracle zelf
- Python 3.x wordt ondersteund
- "MySQL-connector-Python is a pure Python MySQL driver, and is now released under the auspices of the MySQL project itself, as owned by Oracle. MySQL-connector-Python supports both Python 3 as well as eventlet monkeypatching, and is well maintained. It is endorsed by Oracle as the official Oracle-supported driver for MySQL, so to that extent, it is in most ways Openstack's first choice in driver. However, Oracle refuses to publish MySQL-connector-Python on Pypi, which is critical to the Openstack infrastructure. Repeated attempts to communicate with Oracle in order to resolve this issue have not made any progress. Therefore, for this one unfortunate reason, MySQL-connector-Python will not have a place in the Openstack ecosystem unless this issue is resolved" [2]
- "The problem with using Oracle's Connector/Python is that it has subtle bugs and other integration issues. It's easy to install, but nearly impossible to get to work for all the real-world use cases I've tried it for. Hence why I always recommend MySQLdb" [3]
- https://dev.mysql.com/downloads/connector/python/ MySQL Connector/Python
mysqlclient
- Fork van MySQL-Python
- Ondersteunt Python 3.x
- Voldoet aan alle tests van SQLAlchemy
- https://github.com/PyMySQL/mysqlclient-python
MySQL-Python
- Ooit d meest-gebruikte driver [4]
- Niet geschikt voor Python 3.x bron uit ca. 2014!
- Laatste update op GitHub, is uit 2014
- Geschreven in C [5]
- Ondersteunt eventlet en asnc niet (wat dat ook moge zijn) [6]
- https://github.com/farcepest/MySQLdb1
PyMySQL
- Geschikt voor Python 3.x
- Dit zou de opvolger zijn van MySQLdb
- "PyMySQL is a pure Python MySQL driver, first written as a rough port of the MySQL-Python driver. PyMySQL meets all of Openstack's criterion for a driver: it is fully open source, hosted on Github, released on Pypi, is actively maintained, is written in pure Python so is eventlet-monkeypatch compatible, and is fully Python 3 compatible. As this document is named "PyMySQL Evaluation", it should be apparent that this is the driver Openstack is currently leaning towards; because it is the only one that meets all criteria fully, it is already most likely the "winner". However, it does have some minor code quality issues which hopefully can be addressed in some way; the section below titled "PyMySQL Code Review" will summarize the current state of the code. " [7]
- https://github.com/PyMySQL/PyMySQL
OurSQL
- Geschreven in C [8]
- Ondersteunt Python 3.x niet bron uit 2014
- Ondersteunt eventlet en asnc niet (wat dat ook moge zijn) [9]
- Schijnt al lang niet te worden onderhouden bron uit 2014
- https://pythonhosted.org/oursql/index.html
Storm
Selectie
Wanneer heb ik wat gekozen? En waarom?
MySQL-Connector-Python (okt. 2018)
Er is een interessante discussie over wat de beste driver is. Die discussie lijkt zich toe te spitsen op Mysqlclient vs. MySQL-Connector-Python [10], [11] - Ik kies deze laatste.
Shortlist jan. 2019
Deze ondersteunen allemaal Python 3.x en hebben geen 'grote tekortkomingen':
- mysqlclient
- MySQL-Connector-Python
- PyMySQL
Installatie MySQL-Connector (okt. 2018 - Python 2.x)
- Downloaden naar buroblad
- Dubbelklikken
- Installeren
- Klaar.
Installatie mysqlclient (jan. 2019 - 3.x - Niet gelukt)
[12]:
sudo apt install python3-dev # OK sudo apt install default-libmysqlclient-dev # Package kon niet gevonden worden pip install mysqlclient # Pakket niet gevonden cd /home/strompf/.local/bin & sudo ./pip install mysqlclient # Pakket niet gevonden sudo apt install mysqlclient # Niet gevonden
Installatie MySQL-Connector-Python (jan. 2019 - 3.x)
[13]: