不能使用Django的pyodbc,湛蓝的Django 1.11.6连接到MS SQL服务器

问题描述 投票:1回答:2

我工作的一个Django应用程序,它需要连接到MS SQL Server 2008中我使用的Django pyodbc-蔚蓝后端。

环境:

  • Ubuntu的16.04
  • 阿帕奇2.4
  • 蟒蛇3.5.2
  • Django的1.11.6
  • pyodbc 4.0.19
  • Django的pyodbc,蔚蓝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
2个回答
0
投票

我想我已经解决了这个问题,我自己虽然我已经遇到的另一个问题。

其实答案是django-pyodbc-azure包文件内。

  • host_is_server 布尔。只有相关的,如果使用Unix / Linux下的freetds的ODBC驱动程序。 缺省情况下,使用freetds的ODBC驱动程序在HOST设置中指定的值在SERVERNAME ODBC连接柱部件的,而不是在服务器组件被使用时使用;这意味着该值应为存在于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
        },
    }
}

0
投票

如果你来到这里寻找的错误信息,我要强调的是什么东西在阻止登录就会产生此messwage。即使你忘记指定一个user

有没有暗示任何实际的登录问题和错误消息误导连接/主机解决问题。

另外,指定了超时未在合理的时间范围内发生的未解析的主机时,(I等待> 5分钟),并且操作不能由ctrl+c中断。我不得不暂停蟒蛇外壳,而是杀了后台作业。

© www.soinside.com 2019 - 2024. All rights reserved.