Использование Sql Server с Django в производстве
Есть ли у кого-нибудь недавний опыт развертывания приложения Django с серверной частью базы данных SQL Server? Наше рабочее место сильно инвестировано в SQL Server и не будет поддерживать Django, если для него не будет достаточно развитой серверной части.
Я знаю о mssql.django-pyodbc и django-mssql как неофициально поддерживаемые бэкэнды. В обоих проектах, по-видимому, участвует только один человек, что немного беспокоит, хотя взносы кажутся несколько регулярными.
Являются есть ли другие бэкэнды для SQL Server, которые хорошо поддерживаются? Являются ли те два, о которых я упомянул здесь, "достаточно хорошими" для производства? Каковы ваши переживания?
6 ответов:
Как уже было сказано, django-pyodbc-это хороший путь. PyODBC, вероятно, является самой зрелой библиотекой SQL Server для Python.
Единственное, с чем у вас могут возникнуть проблемы, - это то, что pyodbc не очень хорошо поддерживает хранимые процедуры (вы можете вызывать их, но у вас нет способа получить от них результаты). Вы можете вызывать их с помощью pymssql, но я бы избегал этого, если это вообще возможно, так как он не поддерживает стандартный интерфейс DB-API и может быть подвержен изменениям. Если вам нужно для этого лучше всего использоватьadodbapi напрямую (он входит в пакет python win32, который вы, вероятно, все равно установите).
В эти дни
- django-mssql : приводит к ошибке "NoneType not callable" на
./manage.py migrate- avidal/django-pyodbc : не поддерживается. Заменено на:
- django-pyodbc : нет поддержки python 3
- django-pyodbc-azure : пока работает для меня
- EDIT: кажется, не поддерживается. Подано выпуск 125 с просьбой о статусе
- EDIT: получил ответ от сопровождающего. Будет сделана вверх-к-дата с Django 2.0 скоро
- EDIT: maintainer выпустил версию 2.0 для django 2.0
- EDIT: maintainer выпустил версию 2.1 для django 2.1
EDIT: вот версии пакета
Django==1.11.6 django-mssql==1.8 pyodbc==4.0.19 django-pyodbc==1.1.1 django-pyodbc-azure==1.11.0.0
Мы используем django-mssql в производстве нашей компании. У нас тоже была существующая система, использующая mssql. Лично для меня это было лучшее дизайнерское решение, которое я когда-либо принимал, потому что теперь, когда я могу использовать django, моя производительность резко возросла .
Я отправил патч, но когда я начал использовать django-mssql и сделал неделю или две тестирования.С тех пор (октябрь 2008 года) мы запускаем нашу систему на django, и она работает надежно. Я также попробовал pyodbc, но мне это не очень понравилось.
Мы запуск системы ремонта, где все транзакции проходят через эту систему 40 тяжелых пользователей. Если у вас есть еще вопросы, дайте мне знать.
Я видел, как многие люди получают следующую ошибку после установки
django_mssqlна Windows:django.core.exceptions.ImproperlyConfigured: 'sqlserver_ado' isn't an available database backend. Try using django.db.backends.XXX, where XXX is one of: 'dummy', 'mysql', 'oracle', 'postgresql_psycopg2', 'sqlite3' Error was: No module named sqlserver_ado.baseРешение заключается в установке следующего плагина:
Вот "современный" ответ на этот вопрос. Я успешно развернул Django 1.11 на рабочем сервере Ubuntu 16.04, который подключается к MS SQL Server 2017, работающему на другом сервере.
Сначала установите собственный драйвер MS ODBC "драйвер ODBC 17 для SQL Server":
Во-вторых, убедитесь, что вы# https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#ubuntu-1404-1604-and-1710 sudo su curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list apt-get update ACCEPT_EULA=Y apt-get install msodbcsql apt-get install unixodbc-dev # test you can actually get to port 1433 on the server that is running MS SQL: nc -z -v -w5 host.where.sql.server.is.running.com 1433 # add /opt/mssql-tools/bin to your PATH in .bash_profile, e.g.: # PATH="$HOME/bin:$HOME/.local/bin:/opt/mssql-tools/bin:$PATH" # source ~/.bash_profile # now, test that you can actually connect to MS SQL Server: sqlcmd -S host.where.sql.server.is.running.com -U db_username -P db_passwordpip installэти модули:В-третьих, измените запись базы данных вашего Django# https://github.com/michiya/django-pyodbc-azure django-pyodbc-azure==1.11.9.0 # https://github.com/mkleehammer/pyodbc/wiki pyodbc==4.0.22settings.py:DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'db_name', 'USER': 'db_username', 'PASSWORD': 'db_password', 'HOST': 'host.where.sql.server.is.running.com', 'PORT': '1433', 'OPTIONS': { 'driver': 'ODBC Driver 17 for SQL Server', 'isolation_level': 'READ UNCOMMITTED', # prevent SELECT deadlocks }, }, }Я опускаю остальную часть моей конфигурации (nginx, Gunicorn, Django REST Рамки и т. д.), Но это выходит за рамки данного ответа.
Обновление: это работает в рабочей среде уже более 6 месяцев и не имеет никаких проблем, кроме зависящих от MS SQL Server взаимоблокировок, когда несколько соединений выполняют запросы SELECT в одной таблице, что было исправлено с помощью параметра
isolation_level. Система получает около 2 тысяч новых пользователей каждый день.
Еще не использовал его в производстве, но мой первоначальный опыт работы с django-mssql был довольно солидным. Все, что вам нужно, это расширения Python Win32 и получить модуль sqlserver_ado на вашем пути Python. Оттуда вы просто используете
sql_server.pyodbcв качестве вашегоDATABASE_ENGINE. До сих пор я не заметил, чтобы что-то пропало, но и не ударил по нему до конца.
Comments