将 Django 连接到 Microsoft SQL 数据库

Connecting Django to Microsoft SQL Database

我想将我的 Django 应用程序连接到 MS-SQL 服务器 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 )')

您应该知道如果要连接到 SQL 服务器,您必须 use/install ODBC,因为它是本机数据访问 API

关于文档让我们查看以下几行

a Django Microsoft SQL Server external DB backend that uses ODBC by employing the pyodbc library


Compatible with Micosoft ODBC Driver for SQL Server, SQL Server Native Client, and FreeTDS ODBC drivers


选项

词典。当前可用的键是:

driver

String.

Server Native Client 11.0", "FreeTDS" etc). Default is "ODBC Driver 13 for SQL Server".

我不再推荐使用 django-pyodbc-azure,因为它不再由作者维护。 Django 中 SQL 服务器的活动 PyPI 项目当前是 django-mssql-backend。但是,它只支持 Django 2.2 及以上版本。如果不是 Django 3.0,我会高度 建议升级到 Django 2.2(长期支持版本)。 2.1 不再受支持,这将让您在以后的工作中省去一些麻烦。我假设你在 Linux.

第一步:安装 Microsoft 的 Linux 驱动程序(您也可以使用 FreeTDS)

如果要使用微软的驱动,可以这样安装:

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

第二步:在SQL服务器

中创建数据库和服务用户

在SQL服务器中,为您的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)

第三步:配置 Django

最后,让我们将 Django 本身设置为指向 SQL 服务器。在您的 venv 激活的 Django 项目中:

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'。应该这样做。

祝你好运!