Что такое PyMySQL и чем он отличается от MySQLdb? Может ли это повлиять на развертывание Django?

Я только что решил некоторые проблемы в своем приложении Django 1.3, используя PyMySQL вместо MySQLdb. Я следил за этим руководством по переключению: http://web-eng-help.blogspot.com/2010/09/install-mysql-5-for-python-26-and.html

Теперь я хочу знать, что такое PyMySQL и чем он отличается от MySQLdb.

Я использую его на локальном хосте, а затем загружу на какой-нибудь хостинг.

Можно ли использовать PyMySQL на локальном хосте и на хостинге, который они предоставляют? Поскольку я изменил «MySQLdb» в base.py и introspection.py на «PyMySQL», мне нужно будет загрузить его на сервер после изменения этих файлов? Или так как это файлы Django, так как Django уже будет загружен туда, это не имеет большого значения?


person Hafiz    schedule 28.08.2011    source источник
comment
pymysql — это чистый порт Python пакета mysqldb (mysql-python). Таким образом, pymysql можно установить в любой системе без компилятора C. Для установки mysqldb может потребоваться компилятор, а в Windows может возникнуть ошибка (error: Unable to find vcvarsall.bat), если у вас его нет.   -  person skjoshi    schedule 28.10.2014
comment
Этот вопрос был бы более полезным, если бы он был менее широким. Вы спрашиваете о нескольких вещах: о разнице между двумя библиотеками, о том, как развернуть PyMySQL в какой-то среде общего хостинга (о которой вы нам ничего не сказали, и поэтому мы не можем вам помочь), и , в более широком смысле, о каких проблемах нужно знать при использовании PyMySQL с Django. Это три разных вопроса, и их лучше было бы задать как таковые.   -  person Mark Amery    schedule 19.01.2016
comment
Вопрос был о том, следует ли мне использовать PyMySQL или нет, и у меня было два опасения, что вы вызываете несколько вопросов.   -  person Hafiz    schedule 21.01.2016


Ответы (5)


PyMySQL и MySQLdb — это соединители баз данных для Python, библиотеки, позволяющие программам Python взаимодействовать с сервером MySQL.

Обычно вы никогда не загружаете основные файлы Django при развертывании приложения. Если Django нормально работает на вашем сервере развертывания, вам определенно не нужно ничего там менять. Драйвер БД на один или два шага ниже ORM, и, конечно же, ни один из написанного вами кода не зависит от того, какой из них используется.

person Cole    schedule 28.08.2011

PyMySQL и MySQLdb предоставляют одинаковую функциональность — они оба являются коннекторами базы данных. Разница заключается в реализации, где MySQLdb — это расширение C, а PyMySQL — это чистый Python.

Есть несколько причин попробовать PyMySQL:

  • может быть проще запустить на некоторых системах
  • он работает с PyPy
  • его можно "озеленить" и работает с gevent

Правильный способ использовать его с Django — импортировать его и указать ему олицетворять MySQLdb в вашем файле верхнего уровня, обычно manage.py. Поместите следующий код в самый верх вашего manage.py (или любого другого файла, который вы вызываете при запуске сервера):

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass
person Daniel Eriksson    schedule 28.12.2012
comment
Я должен добавить, что официальная версия PyMySQL (в настоящее время) не совместима с Django 1.4, используя описанный выше метод. Существует вилка, которая работает на github.com/CMGS/PyMySQL, если вы хотите попробовать. . - person Daniel Eriksson; 31.12.2012
comment
Я бы добавил еще одну причину: для поддержки Python 3 - person Alveoli; 19.08.2014
comment
Что значит позеленевший? - person chishaku; 11.11.2014
comment
@chisaku его можно сделать совместимым с параллелизмом на основе зеленых потоков, например gevent, eventlet и т. д. Чтобы зеленые потоки работали, необходимо изменить сетевые биты драйвера, чтобы освободить контроль над потоком во время ожидания ввода-вывода. . - person Andrew Gorcester; 22.12.2014
comment
Почему попытка/кроме? Наверняка вам нужна очевидная ошибка, если вы забыли установить pymysql? - person Rob Grant; 31.08.2015
comment
Я считаю, что идея состоит в том, чтобы загрузить PyMySQL для имитации MySQLdb, если он присутствует, но в противном случае вернуться к MySQLdb. - person ChrisGuest; 22.12.2016
comment
+1 причина использовать PyMySQL, это лицензия MIT, которая лучше, если вы собираетесь распространять коммерческий код, чем лицензия MySQLdbs GPL. - person gbtimmon; 01.02.2019

Ваш первый пункт:

Согласно вики-странице pymysql:

MySQLdb — это модуль расширения C, который имеет репутацию сложно компилируемого, особенно если вы работаете на Mac. Кроме того, конечные пользователи должны ждать, пока будут скомпилированы новые двоичные файлы для каждого нового выпуска Python, а MySQLdb никогда не будет работать на Jython, IronPython или PyPy (без чего-то вроде cpyext или IronClad). Мы также поддерживаем 100% совместимость между Python 2 и Python 3, поэтому все усовершенствования, сделанные в магистрали 2.x, будут немедленно доступны на Python 3.

Ваш второй пункт:

Если django отлично работает на вашем локальном хосте, то и в вашей разработке все должно быть в порядке.

person Tauquir    schedule 29.08.2011
comment
да, но я хочу сказать, что, хотя я изменил MySQLdb на pymysql в этих двух файлах, указанных выше, которые относятся к django, создаст ли это проблему? Или django уже есть на веб-хостингах? Или pymysql есть? - person Hafiz; 29.08.2011

По моему опыту, у меня были трудности с установкой «MySQL-python» - (MySQLdb). Это заставило меня искать другие альтернативы, поэтому я нашел pymysql, и он также был легко установлен и работал с первого раза как шарм. Поэтому я бы предложил использовать pymysql только вместо MySQLdb.

person Devendra Bhat    schedule 29.01.2018

Я начинаю с этой темы, я только хочу сказать наблюдение: PyMSQL имеет CPYTHON в качестве требования (возможно, необязательно для производительности https://pypi.org/project/PyMySQL/#requirements) для установки, а Cpyhton зависит от "C", я тестировал Cpython, и у меня возникли проблемы при установке для версии C. .. тогда обе реализации зависят от «C» [если вам нужна производительность], для меня это одно и то же ... если производительность не проблема, возможно, PyMySQL хорош без Cpython, без «C». Возможно, мы можем начать с PyMySQL в одиночку с Python и переключиться с Python на Cpython, чтобы повысить производительность, что может быть хорошо, если у нас все работает, и после этого мы можем попытаться переключиться на Cpython. Нам нужно знать разницу в функциональности. . Почему в Django PyMySQL работает лучше для вас или дает вам решения для некоторых проблем, какие проблемы? Это, пожалуй, самое важное для перемен. MySQLdb, возможно, напрямую зависит от «C», но PyMSQL косвенно через Cpython (в случае схожей производительности), я предпочитаю прямую зависимость без ограничений прыжков... Приветствую.

person Jose.m.g    schedule 27.10.2019