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)
如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)中的Django和MSSQL的示例, “ 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 ,然后为“测试”数据库创建表。