使用django-mssql-1.6连接MS SQL Server 2014

4 投票
4 回答
4203 浏览
提问于 2025-04-27 23:13

我知道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 个回答

2

我用 'SQLNCLI11' 这个提供者解决了我的问题:

DATABASES = {
    'default': {
        'NAME': 'MyDatabase',
        'ENGINE': 'sqlserver_ado',
        'HOST': '.\\SQLEXPRESS',
        'USER': '',
        'PASSWORD': '',
        'OPTIONS': {
            'provider': 'SQLNCLI11',
            'use_legacy_date_fields': 'True'
        }
    }
}
2

请确保你使用的是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
          },
      },
  }
4

也许有点晚了,不过……如果你在用 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
8

从我看到的情况来看,你使用的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提供程序选项,这样就可以正常工作了。希望这对你有帮助。

撰写回答