Итак, я пытался обновить базу данных с помощью python, и при настройке всей среды разработки я наткнулся на эти три вещи, от которых у меня закружилась голова.
Есть MySQLdb
Есть mysqlclient
- И еще есть питон соединителя mysql
В чем каждое из них, чем они отличаются и где их использовать? Благодарность
Ответы:
MySQLdb - это тонкая оболочка Python вокруг модуля C, которая реализует API для базы данных MySQL.
Был MySQLDb1 версия обертки использовали некоторое время назад , и теперь он считается наследием. Когда MySQLDb1 начал развиваться до MySQLDb2 с исправлениями ошибок и поддержкой Python3, MySQLDb1 был разветвлен, и вот как появился mysqlclient с исправлениями ошибок и поддержкой Python3. Подводя итог, теперь у нас есть MySQLDb2, который не готов к производственному использованию, MySQLDb1 как устаревший драйвер и сообщество, поддерживающее mysqlclient с исправлениями ошибок и поддержкой Python3.
Теперь, чтобы решить этот беспорядок, MySQL предоставляет свою собственную версию адаптера MySQL - соединитель mysql , комплексный модуль Python, который использует MySQL API без зависимостей модулей C и использует только стандартные модули Python.
Итак, теперь вопрос сводится к следующему: mysqlclient vs mysql connector.
Что касается меня, я бы
mysqlclient
выбрал официально поддерживаемую библиотеку, но это тоже должно быть хорошим выбором. Оба они активно обновляются исправлениями и новыми функциями, которые вы можете увидеть по активным коммитам в последние дни.Примечание: у меня не было большого опыта работы с ними, поэтому могут быть случаи, когда тот или иной не соответствует вашим потребностям. Обе библиотеки соответствуют стандарту PEP-249, что означает, что вы должны быть в порядке, по крайней мере, с базовой функциональностью везде.
Установка и зависимости
Как ответвление оболочки C, он требует модулей C для работы с MySQL, который добавляет файлы заголовков python для создания этих расширений (см. Python-dev). Установка зависит от используемой вами системы, просто убедитесь, что вы знаете имена пакетов и можете их установить.
источник
В настоящее время поддерживаются следующие адаптеры MySQL для Python:
mysqlclient
- Безусловно, самый быстрый коннектор MySQL для CPython. Для работы требуетсяmysql-connector-c
библиотека C.PyMySQL
- Чистый клиент Python MySQL. По словам сопровождающего обоихmysqlclient
иPyMySQL
, вам следует использоватьPyMySQL
if:libmysqlclient
какой-то причине нельзя использовать .mysql-connector-python
- Коннектор MySQL, разработанный группой MySQL в Oracle, также полностью написанный на Python. Его производительность оказалась худшей из трех. Кроме того, из-за некоторых проблем с лицензированием вы не можете загрузить его из PyPI (но теперь он доступен через conda).Контрольные точки
Согласно следующим тестам,
mysqlclient
работает быстрее (иногда более чем в 10 раз), чем клиенты на чистом Python.источник
PyMySQL
это все еще путь, если вы используете PyPy.mysqlclient
- это коннектор по умолчанию, используемый sqlalchemy, когда URL-адрес вашей базы данных начинается сmysql://...
. Чтобы использоватьPyMySQL
, начните свой URL сmysql+pymysql://...
. Чтобы использоватьmysql-connector-python
, начните свой URL сmysql+mysqlconnector://...
. См. Документацию sqlalchemy для получения дополнительной информации.Придерживайтесь 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
источник