Подтвердить что ты не робот

Какая разница между MySQLdb, mysqlclient и соединителем MySQL/Python?

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

Что каждый из них, разница и где их использовать? Благодаря

4b9b3361

Ответ 1

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 vs mysql connector.

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

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

Установка и зависимости

  • mysqlclient

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

Ответ 2

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

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

  • PyMySQL - Чистый клиент Python MySQL. По словам сопровождающего mysqlclient и PyMySQL, вы должны использовать PyMySQL если:

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

Ориентиры

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

Ответ 3

Множество опций предоставлено пользователями. Немного опоздал на вечеринку. Но мои 2 цента на с бенчмаркингом для версии 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