【问题标题】:Cannot connect django 1.11.6 to MS SQL Server using django-pyodbc-azure无法使用 django-pyodbc-azure 将 django 1.11.6 连接到 MS SQL Server
【发布时间】:2017-11-01 15:17:30
【问题描述】:

我正在开发一个需要连接到 MS SQL Server 2008 的 django 应用程序。我使用 django-pyodbc-azure 后端。

环境:

  • Ubuntu 16.04
  • Apache 2.4
  • python 3.5.2
  • django 1.11.6
  • pyodbc 4.0.19
  • django-pyodbc-azure 1.11.0.0

我也安装了依赖:unixodbc unixodbc-dev tdsodbc freetds-dev

在/etc/freetds/freetds.conf:

[sqlserver]  
    host = mysqlserverhost.com
    port = 6789
    tds version = 8.0

在 /etc/odbc.ini 中:

[sqlserverdatasource]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Servername = sqlserver
Database = test
TDS_Version = 8.0

在 /etc/odbcinst.ini 中:

[ODBC]
Trace = Yes
TraceFile = /tmp/odbc.log

[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1

然后我用下面的方法测试了连接。

import pyodbc
db = pyodbc.connect('DRIVER={FreeTDS};SERVER=mysqlserverhost.com,6789;DATABASE=test;UID=admin;PWD=password;TDS_Version=8.0')
cursor = db.cursor()
cursor.execute("SELECT @@version;")
row = cursor.fetchone()
while row:
    print(row[0])
    row = cursor.fetchone()

我可以从上面的代码中看到 SQL Server 的版本。

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
Apr  2 2010 15:48:46 
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )

在我的 django 项目 settings.py 中,我配置了数据库后端。

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'test',
        'USER': 'admin',
        'PASSWORD': 'password',
        'HOST': 'mysqlserverhost.com',
        'PORT': '6789',
        'OPTIONS': {
            'driver': 'FreeTDS',
        },
    }
}

但是,当我打开我的应用页面并看到以下错误时。

File "/usr/local/lib/python3.5/dist-packages/sql_server/pyodbc/base.py" in get_new_connection
309.                                         timeout=timeout)
Exception Type: OperationalError at /myapp/
Exception Value: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

我的设置有什么问题吗?

【问题讨论】:

    标签: sql-server django


    【解决方案1】:

    如果您在此处搜索错误消息,请让我强调任何阻止登录的行为都会生成此消息。即使您忘记指定user

    对于实际的登录问题没有任何提示,并且错误消息会误导连接/主机解决问题。

    此外,当指定一个不可解析的主机时,在合理的时间范围内不会发生超时(我等待了> 5分钟)并且操作不能被ctrl+c中断。我不得不暂停 python shell 并终止后台作业。

    【讨论】:

      【解决方案2】:

      我想我自己已经解决了这个问题,尽管我遇到了另一个问题。

      答案其实在django-pyodbc-azure包文件中。

      • host_is_server
        布尔值。仅当在 Unix/Linux 下使用 FreeTDS ODBC 驱动程序时才相关。
        默认情况下,使用 FreeTDS ODBC 驱动程序时,在 HOST 设置中指定的值用于 SERVERNAME ODBC 连接字符串组件,而不是用于 SERVER 组件;这意味着该值应该是 freetds.conf FreeTDS 配置文件中存在的数据服务器定义的名称,而不是主机名或 IP 地址。

      通过将'host_is_server': True 添加到数据库后端设置中,我不再看到此 OperationalError。
      现在在我的 django 项目 settings.py 中,数据库后端是:

      DATABASES = {
          'default': {
              'ENGINE': 'sql_server.pyodbc',
              'NAME': 'test',
              'USER': 'admin',
              'PASSWORD': 'password',
              'HOST': 'mysqlserverhost.com',
              'PORT': '6789',
              'OPTIONS': {
                  'driver': 'FreeTDS',
                  'host_is_server': True
              },
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-02
        • 2022-09-28
        • 2018-10-26
        相关资源
        最近更新 更多