我工作的一个Django应用程序,它需要连接到MS SQL Server 2008中我使用的Django pyodbc-蔚蓝后端。
环境:
我还安装家属: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)')
这有什么错在我的设置?
我想我已经解决了这个问题,我自己虽然我已经遇到的另一个问题。
其实答案是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
},
}
}
如果你来到这里寻找的错误信息,我要强调的是什么东西在阻止登录就会产生此messwage。即使你忘记指定一个user
。
有没有暗示任何实际的登录问题和错误消息误导连接/主机解决问题。
另外,指定了超时未在合理的时间范围内发生的未解析的主机时,(I等待> 5分钟),并且操作不能由ctrl+c
中断。我不得不暂停蟒蛇外壳,而是杀了后台作业。