В чем разница между MySQLdb, mysqlclient и MySQL connector/Python?

поэтому я пытался сделать некоторое обновление базы данных с python и при настройке всей среды разработки я наткнулся на эти три вещи, которые заставили меня головокружение.

  1. здесь MySQLdb

  2. здесь mysqlclient

  3. и тут mysql разъем python

что каждый из них, разница и где их использовать? Спасибо

3 ответов


MySQLdb - Это тонкая оболочка python вокруг модуля C, которая реализует API для базы данных MySQL.

не было MySQLDb1 версия обертки используется некоторое время назад, и теперь она считается наследием. Как MySQLDb1 начал развиваться до MySQLDb2 с исправлениями ошибок и поддержкой Python3, MySQLDb1 был раздвоен и вот как mysqlclient появился, с исправлениями ошибок и поддержкой Python3. Подводим итог, так что теперь у нас есть MySQLDb2, которого нет готовый к использованию в производстве, MySQLDb1 как устаревший драйвер и сообщество поддерживали mysqlclient с исправлениями ошибок и поддержкой Python3.

теперь, чтобы решить этот беспорядок, MySQL предоставляет свою собственную версию адаптера MySQL -mysql connector, модуль все-в python, который использует MySQL API с нет зависимостей модулей C и используются только стандартные модули python.

Итак, теперь вопрос сводится к: mysqlclient против mysql соединитель.

Что касается меня, я бы пошел с официально поддерживаемой библиотекой, однако mysqlclient должно быть хорошим выбором. Оба они активно обновляются с исправлениями и новыми функциями, которые вы можете видеть активных совершает в последние дни.

Примечание: у меня не было большого опыта работы с ними, поэтому могут быть случаи, когда тот или иной не соответствует вашим потребностям. Обе библиотеки следуют PEP-249 standard что означает, что вы должны быть в порядке, по крайней мере базовая функциональность везде.

установка и зависимостей

  • mysqlclient

в качестве вилки оболочки C для работы с MySQL требуются модули C, которые добавляют файлы заголовков python для создания этих расширений (read python-dev). Установка зависит от используемой системы, просто убедитесь, что вы знаете имена пакетов и можете их установить.


есть адаптеры MySQL для Python, которые в настоящее время поддерживаются:

  • mysqlclient - на сегодняшний день самый быстрый MySQL разъем для CPython. Требуется mysql-connector-c библиотека C для работы.

  • PyMySQL - чистый клиент Python MySQL. согласно сопровождающему обоих mysqlclient и MyPySQL, вы должны использовать PyMySQL Если:

    • вы не можете использовать libmysqlclient для некоторых причина.
    • вы хотите использовать сокет monkeypatched gevent или eventlet.
    • вы не хотите взломать протокол mysql.
  • mysql-connector-python - mysql connector разработан группой MySQL в Oracle, также полностью написан на Python. Похоже, это худшее из трех. Кроме того, из-за некоторых проблем с лицензированием вы не можете загрузить его из PyPI (но теперь он доступен через стадион conda).

критерии

согласно следующим критериям,mysqlclient быстрее (иногда > 10x быстрее), чем чистые клиенты Python.


много вариантов, предоставляемых пользователями. Поздновато для вечеринки. Но мой 2 центы!--5--> in on с бенчмаркингом для версии pypy 3.7.

придерживайтесь mysqlclient, если вы хотите более быстрый доступ и повторяющийся доступ

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]

петли... из предыдущего бенчмаркинга...

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