Подключение Django к SQL Server всегда является чем-то вроде движущейся цели в отношении лучших практик. Я долгое время пользовался драйвером FreeTDS, который вместе с pyodbc
и django-pyodbc-azure
предоставлял стек, необходимый для запуска Django с SQL Server. Однако драйверы Microsoft прошли долгий путь для Linux, и я перешел на их использование. Вот инструкции по подключению:
Шаг 1. Установите драйвер ODBC для Microsoft Linux
Вы также можете использовать FreeTDS, но на момент написания этой статьи я рекомендовал использовать драйвер Microsoft; Инструкции по установке находятся здесь: https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017
Шаг 2. Проверка установки
Если все заработало, вы сможете проверить установку, просмотрев /etc/odbcinst.ini; в нем должен быть раздел, который выглядит примерно так:
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1
UsageCount=1
Обратите внимание на заголовок раздела файла: ODBC Driver 17 for SQL Server
. Мы будем использовать это позже для ссылки на драйвер.
Шаг 3: Настройка пользователя службы в SQL Server
Для обеспечения наилучшей безопасности, я рекомендую настраивать индивидуального пользователя для каждого вашего проекта Django. Следующий скрипт создаст DATABASE, LOGIN, USER и PASSWORD в SQL Server с минимальными разрешениями, необходимыми для запуска Django.
/*
This Script Creates a SQL Server Database, Login and User
With Appropriate Permissions for a Production Django Project
with migrations. Simply fill out the variables below (@db_name and @db_password)
Username will be set to database name + '_user' by default.
*/
DECLARE @db_name VARCHAR(MAX) = 'project'
DECLARE @db_password VARCHAR(MAX) = 'project_password'
DECLARE @db_user VARCHAR(MAX) = @db_name + '_user'
--
--
USE master
DECLARE @cmd VARCHAR(MAX)
-- Server scope: create SQL Server login and permissions
SET @cmd = 'CREATE LOGIN ' + @db_user + ' WITH PASSWORD = ''' + @db_password + ''''
EXEC(@cmd)
SET @cmd = 'GRANT VIEW SERVER STATE TO ' + @db_user
EXEC(@cmd)
SET @cmd = 'CREATE DATABASE [' + @db_name + ']'
EXEC(@cmd)
-- DB scope: create user for server login and permissions
SET @cmd = 'USE [' + @db_name + '];'
SET @cmd = @cmd + 'CREATE USER ' + @db_user + ' FOR LOGIN ' + @db_user + ';'
SET @cmd = @cmd + 'GRANT SELECT, INSERT, UPDATE, DELETE, ALTER, CREATE TABLE, REFERENCES, EXEC TO ' + @db_user
EXEC(@cmd)
Шаг 4: Настройка Django
Запустите свой virtualenv для вашего проекта Django. Мы собираемся установить django-pyodbc-azure (который также установит pyodbc).
pip install django-pyodbc-azure
Затем мы изменим наши настройки Django.
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'HOST': 'dbserver.your-domain.com',
'PORT': '1433',
'NAME': 'project',
'USER': 'project_user',
'PASSWORD': 'project_password',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'unicode_results': True,
},
},
}
Шаг 5: запустить начальную миграцию
Если все сработало, теперь вы сможете запускать начальные миграции и видеть исходные таблицы Django в своей базе данных SQL Server. Возможно, вы также захотите увидеть пост здесь, в котором есть некоторые специфические инструкции Heroku: sql.h не найден при установке PyODBC на Heroku
Удачи!