2009-05-09 5 views
36

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

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

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

ответ

19

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

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

+0

Спасибо за 'adodbapi' - это было для меня новым. –

+0

django-mssql использует вилку adodbapi и поддерживает хранимые процедуры. – Manfre

+2

Вы можете получить результаты из хранимых процедур SQLServer, вызвав их так: 'cursor.execute ('DECLARE @results int; EXEC @ results = spMyProc; SELECT @results')' –

1

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

4

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

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

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

+0

Является ли django-mssql привязанным к определенной версии django? –

+7

django-mssql требует запуска django в Windows. Что делать, если в Linux запускается django? –

+0

@Paul, у меня есть существующий sybase db, который я хочу подключить Django для выбора только отчетов. Могу ли я напрямую подключиться к DSN с помощью django-mssql? – toasteez

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/

+1

Я получаю эту точную ошибку прямо сейчас, ссылка больше не действительна, знаете ли вы, где я могу получить плагин? –

+1

@DavidZhanLiu: это Python Win32 Extensions в соответствии с веб-архивом. Он переместился на http://sourceforge.net/projects/pywin32/. – SaeX

5

В эти дни

  • django-mssql: res по ошибке «NoneType not callable» на ./manage.py migrate
  • avidal/django-pyodbc: Неподдерживаемый.Заменено:
    • django-pyodbc: нет поддержки Python 3
    • django-pyodbc-azure: не работает для меня до сих пор
      • EDIT: Кажется, никто не поддерживались. Filed issue 125 с вопросом о статусе
      • EDIT: получил ответ от сопровождающего. Будет составлен актуальный с Django 2.0 скоро

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 
+1

было бы полезно предоставить версии Django и библиотек, которые вы протестировали, поскольку эта информация может быстро устаревать. –

+0

Также обратите внимание, что 'django-pyodbc' и его вилки работают на Linux - в отличие от' django-mssql', он не имеет зависимостей Windows. SQL Server больше не требует Windows, поэтому, вероятно, в будущем это станет все более актуальным. – lehiester

1

Вот "современный" ответ на этот вопрос. Я успешно развернул Django 1.11 на сервере Ubuntu 16.04, который подключается к MS SQL Server 2017, работающему на другом сервере.

Во-первых, установить родной драйвер MS ODBC "ODBC Driver 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:

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', 
     }, 
    }, 
} 

Я omitt (nginx, Gunicorn, Django REST Framework и т. д.), но это выходит за рамки этого ответа.

Смежные вопросы