【问题标题】:Connecting Django to Microsoft SQL Database将 Django 连接到 Microsoft SQL 数据库
【发布时间】:2020-05-16 16:56:18
【问题描述】:

我想将我的 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] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

【问题讨论】:

  • 你有没有安装odbc驱动
  • 链接的答案对于这里询问的主题是完全错误的。这是在问如何连接到 SQL Server,一个数据库,而不是如何在连接到 PostgreSQL 的 Windows 上运行 IIS。这应该重新打开。
  • 我已经安装了 odbc 驱动程序@iklinac。我不明白为什么这个问题是重复的,显示的链接肯定不能回答我的问题。
  • 你安装了什么版本的驱动,你有什么平台,python和驱动的x64还是x86
  • @iklinac 版本 = 2.1.0.0 (pyodbc-azure),我的 django 版本 = 2.1.15,我的 python 版本=3.6.4

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


【解决方案1】:

我不再推荐使用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。在您的 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'。应该这样做。

祝你好运!

【讨论】:

  • 感谢您分享您的解决方案。你有没有遇到过这个错误:nothing provides e2fsprogs needed by msodbcsql17-17.7.2.1-1.x86_64 尝试安装 msodbcsql17 yum install msodbcsql17 时?不确定它是否重要,但我在一个带有基本图像registry.access.redhat.com/ubi8/python-38 的容器中运行它。谢谢你的时间??
【解决方案2】:

您应该知道如果要连接到 SQL Server,您必须使用/安装 ODBC,因为它是本机数据访问 API

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

使用 ODBC 的 Django Microsoft SQL Server 外部数据库后端 使用 pyodbc 库


Micosoft ODBC Driver for SQL ServerSQL Server Native ClientFreeTDS ODBC drivers 兼容


选项

字典。当前可用的键是:

司机

字符串。

Server Native Client 11.0", "FreeTDS" etc). 默认为 "ODBC Driver 13 用于 SQL Server”。

【讨论】:

  • 我现在已经下载并安装了 ODBC。问题是当我在我的数据库连接代码中指定 'driver'='ODBC Driver 13 for SQL Server' 时。我能够创建我的迁移文件,但是当我尝试迁移时(错误:settings.DATABASES 配置不正确。请提供 ENGINE 值。)。但是当我提供引擎值('ENGINE': 'sql_server.pyodbc',)时,我无法创建我的迁移文件。即,如果我在数据库代码中同时提供引擎和服务器值,则不会创建迁移文件。
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 2022-12-11
相关资源
最近更新 更多