Использование Sql Server с Django в производстве - PullRequest
43 голосов
/ 09 мая 2009

Кто-нибудь получил недавний опыт развертывания приложения Django с серверной частью базы данных SQL Server? Наше рабочее место сильно инвестировано в SQL Server и не будет поддерживать Django, если для этого нет достаточно развитой серверной части.

Мне известны mssql.django-pyodbc и django-mssql как неофициально поддерживаемые серверные части. Похоже, что в обоих проектах участвует только один человек, что немного беспокоит, хотя они кажутся регулярными.

Существуют ли другие серверные части для SQL Server, которые хорошо поддерживаются? Достаточно ли хороши те два, о которых я упомянул здесь, для производства? Каковы ваши переживания?

Ответы [ 6 ]

21 голосов
/ 09 мая 2009

Как уже говорилось, django-pyodbc - это хороший путь. PyODBC, вероятно, является самой зрелой библиотекой SQL Server для Python.

Единственное, с чем у вас могут возникнуть проблемы, это то, что pyodbc не очень хорошо поддерживает хранимые процедуры (вы можете вызывать их, но у вас нет возможности получить от них результаты). Вы можете вызывать их, используя pymssql, но я бы избегал этого, если это вообще возможно, поскольку он не поддерживает стандартный интерфейс DB-API и может подвергаться изменениям. Если вам нужно сделать это, лучше всего использовать adodbapi напрямую (он входит в пакет python win32, который вы, вероятно, в конечном итоге установите).

13 голосов
/ 31 октября 2017

В эти дни

  • django-mssql : ошибка «NoneType not callable» при ./manage.py migrate
  • avidal / django-pyodbc : не поддерживается. Заменен на:
    • django-pyodbc : нет поддержки Python 3
    • django-pyodbc-azure : у меня пока работает
      • РЕДАКТИРОВАТЬ: кажется, не поддерживается. Подано номер 125 с просьбой о статусе
      • РЕДАКТИРОВАТЬ: получил ответ от сопровождающего. Скоро будет обновлена ​​до Django 2.0
      • РЕДАКТИРОВАТЬ: сопровождающий выпустил версию 2.0 для django 2.0
      • РЕДАКТИРОВАТЬ: сопровождающий выпустил версию 2.1 для django 2.1

РЕДАКТИРОВАТЬ: Вот версии пакета

Django==1.11.6
django-mssql==1.8
pyodbc==4.0.19
django-pyodbc==1.1.1
django-pyodbc-azure==1.11.0.0
6 голосов
/ 16 февраля 2018

Вот «современный» ответ на этот вопрос. Я успешно развернул 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 вашего Django settings.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 000 новых пользователей.

4 голосов
/ 08 июня 2012

Я видел, как многие люди получают следующую ошибку после установки 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/

4 голосов
/ 09 мая 2009

Мы используем django-mssql в производстве в нашей компании. У нас тоже была существующая система, использующая mssql. Лично для меня это было лучшее дизайнерское решение, которое я когда-либо принимал, потому что моя производительность значительно возросла, когда я могу использовать django.

Я представил патч, но когда я начал использовать django-mssql и провел неделю или две тестирования. С тех пор (октябрь 2008 г.) наша система работает на django, и она работает нормально. Я также попробовал pyodbc, но мне не очень понравилось.

У нас работает система ремонта, где все транзакции проходят через эту систему 40 активных пользователей. Если у вас есть еще вопросы, дайте мне знать.

1 голос
/ 09 мая 2009

Еще не использовал его в производстве, но мой первоначальный опыт работы с django-mssql был довольно солидным. Все, что вам нужно, это расширения Python для Win32 и получить модуль sqlserver_ado на ваш путь Python. Оттуда вы просто используете sql_server.pyodbc в качестве DATABASE_ENGINE. До сих пор я не заметил ничего пропавшего, но я еще и не ударил по нему полностью.

...