Подключение Django к базе данных Microsoft SQL

Я хочу подключить свое приложение django к базе данных MS-SQL server 2014. Я написал этот код для установления соединений.

 DATABASES = {
'default': {
    'ENGINE': 'sql_server.pyodbc',
    'HOST':'DESKTOP-6UNRAN0',
    'PORT':'1433',
    'NAME': 'MOVIE',
    'COLLATION' : '',

  }
}

Я установил sql_server.pyodbc

 pip install django-pyodbc-azure

как указано в документации https://pypi.org/project/django-pyodbc-azure/. Я все еще получаю ошибку

django.db.utils.InterfaceError: ('IM002', '[IM002] [Microsoft] [Диспетчер драйверов ODBC] Имя источника данных не найдено и не указан драйвер по умолчанию (0) (SQLDriverConnect)')


person shaswat kumar    schedule 16.05.2020    source источник
comment
у вас установлен драйвер odbc?   -  person iklinac    schedule 16.05.2020
comment
Связанный ответ совершенно неверен для заданной здесь темы. Это спрашивает, как подключиться к SQL Server, базе данных, а не как запустить IIS в Windows, подключившись к PostgreSQL. Это должно быть открыто.   -  person FlipperPA    schedule 17.05.2020
comment
Я установил драйвер odbc @iklinac. Я не понимаю, почему этот вопрос повторяется, указанная ссылка определенно не отвечает на мой вопрос.   -  person shaswat kumar    schedule 17.05.2020
comment
какая версия драйвера у вас установлена ​​и какая у вас платформа, x64 или x86 для python и драйвера   -  person iklinac    schedule 17.05.2020
comment
@iklinac version = 2.1.0.0 (pyodbc-azure), моя версия django = 2.1.15, моя версия python = 3.6.4   -  person shaswat kumar    schedule 18.05.2020
comment
@shaswatkumar спросил вас о версии драйвера ODBC, которую вы установили, а не о версии пакета python, также вы не ответили, в какой архитектуре x86 или x64 вы установили драйвер и python для   -  person iklinac    schedule 18.05.2020
comment
согласно этой документации django (docs.djangoproject.com/en/3.0/ref/databases) для подключения к MS-SQL я загрузил (pyodbc-azure 2.1.0.0), архитектура = x64, никаких других конкретных драйверов ODBC, упомянутых в документации   -  person shaswat kumar    schedule 18.05.2020


Ответы (2)


Я больше не рекомендую использовать django-pyodbc-azure, так как он больше не поддерживается автором. Активным проектом PyPI для SQL Server в Django в настоящее время является django-mssql-backend. Однако он поддерживает только Django 2.2 и выше. Я настоятельно рекомендую выполнить обновление до Django 2.2 (выпуск с долгосрочной поддержкой), если не до Django 3.0. 2.1 больше не поддерживается, и теперь это избавит вас от головной боли, так как придется немного поработать. Я предполагаю, что вы используете Linux.

Шаг первый: установите драйвер Microsoft для Linux (вы также можете использовать FreeTDS)

Если вы хотите использовать драйвер Microsoft, вы можете установить его следующим образом:

sudo curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo

sudo yum remove unixODBC-utf16 unixODBC-utf16-devel
sudo ACCEPT_EULA=Y yum install msodbcsql17

Шаг 2. Создайте базу данных и пользователя службы в SQL Server

В 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)

Шаг 3. Настройте Django

Наконец, давайте настроим сам Django, чтобы он указывал на SQL Server. В вашем проекте Django с активированным venv:

pip install django-mssql-backend

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

Если вы используете FreeTDS или другой драйвер, измените строку OPTIONS, 'driver': 'ODBC Driver 17 for SQL Server'. Это должно сработать.

Удачи!

person FlipperPA    schedule 22.05.2020
comment
спасибо за то, что поделились своим решением. Вы когда-нибудь сталкивались с такой ошибкой: nothing provides e2fsprogs needed by msodbcsql17-17.7.2.1-1.x86_64 при попытке установить msodbcsql17 yum install msodbcsql17? Не уверен, что это важно, но я запускаю это внутри контейнера с базовым изображением registry.access.redhat.com/ubi8/python-38. Спасибо за уделенное время ???????? - person Zhao Li; 11.05.2021

Ожидается, что вы знаете, что если вы хотите подключиться к SQL Server, вам придется использовать / устанавливать ODBC, поскольку это собственный API доступа к данным.

Что касается документации, давайте рассмотрим следующие строки

внешний бэкэнд БД Django Microsoft SQL Server, который использует ODBC, используя библиотеку pyodbc


Совместим с Драйвер Micosoft ODBC для SQL Server, Собственный клиент SQL Server и Драйверы ODBC FreeTDS


ПАРАМЕТРЫ

Словарь. Текущие доступные ключи:

Водитель

Нить.

Server Native Client 11.0 »,« FreeTDS »и т. Д.). По умолчанию -« Драйвер ODBC 13 для SQL Server ».

person iklinac    schedule 18.05.2020
comment
Я скачал и установил ODBC. Проблема заключается в том, что я указываю «драйвер» = «Драйвер ODBC 13 для SQL Server» в моем коде подключения к базе данных. Я могу создать свои файлы миграции, но когда я пытаюсь выполнить миграцию (ошибка: settings.DATABASES настроен неправильно. Укажите значение ENGINE.). Но когда я указываю значение двигателя ('ENGINE': 'sql_server.pyodbc',), я не могу создавать свои файлы миграции. то есть файлы миграции не создаются, если я указываю в коде базы данных и двигатель, и сервер. - person shaswat kumar; 18.05.2020