使用django-mssql-1.6连接MS SQL Server 2014
我知道django-mssql-1.6/README里提到:
SQL Server版本
支持的版本有:
- 2008
- 2008r2
- 2012
但是,因为1.6是最新的版本,我想知道有没有人找到连接到MS SQL Server 2014的方法。我在尝试,但遇到了这个错误信息:
django.db.utils.OperationalError: (com_error(-2147352567, '发生异常。', (0, u'ADODB.Connection', u'找不到提供程序。可能没有正确安装。', u'C:\Windows\HELP\ADO270.CHM', 1240655, -2146824582), None), u'打开连接时出错: 数据源=127.0.0.1;初始目录=testdb;集成安全=SSPI;提供程序=sqlncli10;数据类型兼容性=80;MARS连接=True')
使用的配置:
DATABASES = {
'default': {
'ENGINE': 'sqlserver_ado',
'NAME': 'testdb'
}
}
4 个回答
我用 'SQLNCLI11'
这个提供者解决了我的问题:
DATABASES = {
'default': {
'NAME': 'MyDatabase',
'ENGINE': 'sqlserver_ado',
'HOST': '.\\SQLEXPRESS',
'USER': '',
'PASSWORD': '',
'OPTIONS': {
'provider': 'SQLNCLI11',
'use_legacy_date_fields': 'True'
}
}
}
请确保你使用的是Django 1.6版本,并且django-mssql也是1.6版本。我发现django-mssql 1.6和最新的Django 1.8不兼容。
以下是我的数据库配置设置,这些设置对我有效 -
DATABASES = {
'default': {
'ENGINE': 'sqlserver_ado',
'NAME': 'dbname', # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
'USER': 'db_user_id',
'PASSWORD': 'db_password',
'HOST': 'host_name_or_ip_addr', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '1433', # Set to empty string for default.
'OPTIONS': {
'provider' : 'SQLOLEDB' # or these other two dlls did not work for me SQLCLI10, SQLCLI11
},
},
}
也许有点晚了,不过……如果你在用 Django 1.10,而且不一定要用 django-mssql
,你可以考虑换成 django-pyodbc-azure 这个包,它可以直接支持 MS SQL Server 2014 和 2016。
我刚试了一下,结果 可以用,在这个环境下:
- Windows Server 2012 R2
- Python 3.5.2
- SQL Server 2016
- Django 1.10
从我看到的情况来看,你使用的django-mssql和Django版本都是正确的。我最近把Django从1.6升级到了1.7,这时候我需要更换数据库后端,因为在Django 1.7中,sql_server.pyodbc
不再被支持。当我切换到django-mssql(sqlserver_ado
)时,我遇到了这个问题。
问题在于你使用了错误的提供程序。django-mssql默认使用的是SQLCLI10
,这个对我来说也不管用。如果你在数据库配置中添加一个选项哈希,就像上面回答中提到的那样,只要你使用SQLOLEDB
提供程序,就能解决你的问题。这是我的配置:
DATABASES = {
'default': {
'NAME': 'CVH_Dev',
'ENGINE': 'sqlserver_ado',
'HOST': '192.***.212.2**',
'USER': 'USER',
'PASSWORD': 'PWD',
'OPTIONS': {
'provider': 'SQLOLEDB',
'use_legacy_date_fields': 'True'
}
}
}
使用SQLOLEDB
提供程序选项,这样就可以正常工作了。希望这对你有帮助。