Использование Sql Server с Django в производстве
Кто-нибудь получил недавний опыт развертывания приложения Django с базой данных базы данных SQL Server? Наше рабочее место сильно инвестировано в SQL Server и не будет поддерживать Django, если для него недостаточно развитый задний конец.
Я знаю mssql.django-pyodbc и django-mssql как неофициально поддерживаемые концы. Кажется, что у обоих проектов есть только один человек, который немного беспокоится, хотя вклад кажется несколько регулярным.
Существуют ли какие-либо другие концы для SQL Server, которые хорошо поддерживаются? Являются ли эти два, которые я упомянул здесь, "достаточно хороши" для производства? Каковы ваши впечатления?
Ответы
Ответ 1
Как уже было сказано, django-pyodbc - хороший способ пойти. PyODBC, вероятно, самая зрелая библиотека SQL Server для Python.
Единственное, с чем вы можете столкнуться, это то, что pyodbc не очень хорошо поддерживает хранимые процедуры (вы можете их назвать, но у вас нет возможности получить от них результаты). Вы можете вызвать их с помощью pymssql, но я бы избегал этого, если это вообще возможно, поскольку он не поддерживает стандартный интерфейс DB-API и может быть изменен. Если вам нужно это сделать, лучше всего использовать adodbapi напрямую (он входит в пакет python win32, который вы, вероятно, будете в конечном итоге установка все равно).
Ответ 2
Эти дни
- django-mssql: привел к ошибке "NoneType not callable" на
./manage.py migrate
- avidal/django-pyodbc: не поддерживается. Заменен на:
- django-pyodbc: поддержка python 3
- django-pyodbc-azure: работает для меня до сих пор
- РЕДАКТИРОВАТЬ: Кажется, не потерян. Вопрос № 125 о статусе
- EDIT: получил ответ от сопровождающего. Скоро будет добавлен Django 2.0
- EDIT: разработчик выпустил версию 2.0 для django 2.0
- EDIT: разработчик выпустил версию 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
Ответ 3
Мы используем django-mssql в производстве в нашей компании. У нас тоже была существующая система, использующая mssql. Для меня лично это было лучшее дизайнерское решение, которое я когда-либо делал, потому что моя производительность резко увеличилась, и теперь я могу использовать django.
Я отправил патч, но когда я начал использовать django-mssql и провел неделю или два тестирования. С тех пор (октябрь 2008 года) мы запускаем нашу систему на django, и она работает сплошная. Я также пробовал пиодбк, но мне не нравилось много.
У нас работает система ремонта, в которой все транзакции проходят через эту систему 40 тяжелых пользователей. Если у вас есть дополнительные вопросы, дайте мне знать.
Ответ 4
Я видел, как многие люди получают следующую ошибку после установки 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
В решении устанавливается следующий плагин:
http://sourceforge.net/projects/pywin32/
Ответ 5
Здесь "современный" ответ на этот вопрос. Я успешно развернул 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_password
Во-вторых, убедитесь, что вы pip install
эти модули:
# https://github.com/michiya/django-pyodbc-azure
django-pyodbc-azure==1.11.9.0
# https://github.com/mkleehammer/pyodbc/wiki
pyodbc==4.0.22
В-третьих, измените запись DATABASES в settings.py
Django.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 Framework и т.д.), Но это выходит за рамки этого ответа.
Обновление: теперь это работает в течение 6+ месяцев и не имеет никаких проблем, кроме тупиков, зависящих от MS SQL Server, когда несколько подключений выполняют запросы SELECT в той же таблице, которые были исправлены с помощью параметра isolation_level
. Система получает около 2 тыс. Новых пользователей каждый день.
Ответ 6
Не использовал его в производстве еще, но мои первоначальные опыты с django-mssql были довольно прочными. Все, что вам нужно, это расширения Python Win32 и получить модуль sqlserver_ado на вашем пути Python. Оттуда вы просто используете sql_server.pyodbc
как ваш DATABASE_ENGINE
. До сих пор я не заметил ничего, что не хватало, но я еще не полностью ударил по нему.