django - 将 Django 连接到 Microsoft SQL 数据库

标签 django sql-server-2014 pypyodbc django-pyodbc django-mssql-backend

我想将我的 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 Driver Manager] 未找到数据源名称且未指定默认驱动程序 (0) (SQLDriverConnect)')

最佳答案

我不再推荐使用 django-pyodbc-azure,因为它不再由作者维护。 Django 中用于 SQL Server 的事件 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 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)

第三步:配置 Django

最后,让我们将 Django 本身设置为指向 SQL Server。在激活了 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'。应该这样做。

祝你好运!

关于django - 将 Django 连接到 Microsoft SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61840428/

相关文章:

Python 和 Django 基础知识

Django 过滤器 : Displaying a list of choices for filtering a TextField

python - Modpython 和虚拟环境

sql-server - 检查变量是否为 NULL 会降低性能

django - 在保存之前将数据添加到 Django 表单?

sql-server - SQL Server 2014 CTP1 上的 MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT

python - 中文字符插入问题

python - 使用pypyodbc、pymssql和pyodbc的优缺点是什么?

python - 任何人都可以逐步解释以下堆栈跟踪吗?

sql-server - 使用 Access 作为 SQL Server 的前端并具有暂存表