连接 Django 与 MSSQL 服务器

use*_*311 8 python sql-server django django-mssql python-3.x

我正在尝试将我的 Django 应用程序连接到 SQL Server 2016。我尝试使用 django-pyodbc 但它不支持 Django 1.11。相反,我安装了 django-mssql 1.8。当我尝试运行该应用程序时,出现此错误。

TypeError was unhandled by user code
Message: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)

execute_from_command_line(sys.argv)manage.py中。

这是我的 settings.py 数据库:

DATABASES = {
    'default': {
        'ENGINE': 'sqlserver_ado',
        'NAME': 'TEST2',
        'HOST': 'PCNAME\SQLEXPRESS',
        'USER': '',
        'PASSWORD': '',
        'OPTIONS' : {
            'provider': 'SQLOLEDB',
            'use_mars': True,
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过默认提供程序和 SQLOLEDB 提供程序,但总是遇到相同的错误。我也尝试过设置和不设置用户和密码,但错误仍然相同。我能够很好地连接到本地 MySQL 数据库。

我运行的是 Windows 10、Visual Studio 2015、SQL Server Express 2016

编辑:

这是以下的输出pip freeze

appdirs==1.4.3
Django==1.11
django-mssql==1.8
mysqlclient==1.3.10
packaging==16.8
pyodbc==4.0.16
pyparsing==2.2.0
pytz==2017.2
six==1.10.0
Run Code Online (Sandbox Code Playgroud)

这是我的要求.txt:

django==1.11
mysqlclient==1.3.10
django-mssql==1.8
Run Code Online (Sandbox Code Playgroud)

rpa*_*ent 6

django-mssql 文档中所述,最新版本仅支持 Django 1.8,因此无法与 Django 1.11 配合使用。

您必须等到软件包支持较新版本的 django 才能升级。这就是在不支持的数据库后端使用 Django 时出现的问题,您依赖于第三方软件包维护,而这个似乎很难与 Django 保持同步。


小智 5

使用mssql-django,我们可以通过Windows 身份验证SQL Server 身份验证将Django连接到MSSQL(SQL Server)。*我使用SQL Server 2019 Express

使用Windows 身份验证,要使用mssql-django将Django连接到MSSQL,请将以下代码设置为“settings.py”下面的代码是同一 Windows 计算机(localhost)中的DjangoMSSQL的示例, “ ENGINE 必须是“mssql”“NAME”代表数据库名称“test”“DESKTOP-QVRCPTA”代表“HOST”Windows计算机名称(设备名称)* “PORT”保留为空,因为如果设置任何端口号都会出错,例如“2244”“9877”甚至“1433”,这是MSSQL的默认端口号

# "settings.py"

DATABASES = {
    'default':{
        'ENGINE':'mssql',                    # Must be "mssql"
        'NAME':'test',                       # DB name "test"
        'HOST':'DESKTOP-QVRCPTA\SQLEXPRESS', # <server>\<instance>
        'PORT':'',                           # Keep it blank
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,“DESKTOP-QVRCPTA”可以替换为“localhost”“USER”“PASSWORD”可以用空字符串替换,“PORT”可以删除,如下所示,以使用Windows 身份验证将Django连接到MSSQL

# "settings.py"

DATABASES = {
    'default':{
        'ENGINE':'mssql',
        'NAME':'test',
        'USER':'',                     # Keep it blank
        'PASSWORD':'',                 # Keep it blank
        'HOST':'localhost\SQLEXPRESS', # "localhost" is also possible
        # 'PORT':'',                   # Can be removed
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

对于SQL Server 身份验证,要使用mssql-django将Django连接到MSSQL ,请设置Windows 身份验证的代码,如上所示,将“USER”“PASSWORD”设置为“settings.py”* Windows 身份验证SQL Server 身份验证的代码之间的区别仅是“USER”“PASSWORD”

# "settings.py"

DATABASES = {
    'default':{
        'ENGINE':'mssql',  
        'NAME':'test',           
        'USER':'john',                       # Username "john"
        'PASSWORD':'johnpw',                 # Password "johnpw"
        'HOST':'DESKTOP-QVRCPTA\SQLEXPRESS',
        'PORT':'',                           
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,与Windows 身份验证的代码相同,“DESKTOP-QVRCPTA”可以替换为“localhost”,并且可以删除“PORT”,如下所示,以使用SQL Server 身份验证将Django连接到MSSQL

# "settings.py"

DATABASES = {
    'default':{
        'ENGINE':'mssql',
        'NAME':'test',
        'USER':'john',        
        'PASSWORD':'johnpw',
        'HOST':'localhost\SQLEXPRESS', # "localhost" is also possible
        # 'PORT':'',                   # Can be removed   
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来,安装最新的软件包mssql-django

pip install mssql-django
Run Code Online (Sandbox Code Playgroud)

然后,进行迁移并迁移:

python manage.py makemigrations && python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

然后,创建超级用户:

python manage.py createsuperuser
Run Code Online (Sandbox Code Playgroud)

现在,我们可以使用Windows 身份验证SQL Server 身份验证将Django连接到MSSQL ,然后为“测试”数据库创建表。