Использование FreeTDS с Django - PullRequest
0 голосов
/ 31 октября 2018

Я бьюсь головой о стену и надеюсь хотя бы найти какое-то направление ... Я создал приложение в Django, которое зависит от базы данных MSSQL, размещенной в Azure. Мне удалось успешно развернуть мое приложение на Heroku, но я не могу получить доступ к базе данных SQL, поскольку Heroku не поддерживает драйверы базы данных MSSQL. Я читал, что можно получить доступ к базе данных, используя комбинацию FreeTDS и UnixODBC, но не могу найти никакой документации, объясняющей, как это сделать. Кто-нибудь знаком с FreeTDS или UnixODBC, который может, по крайней мере, указать мне правильное направление?

Заранее спасибо.

1 Ответ

0 голосов
/ 06 ноября 2018

Подключение 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

Удачи!

...