我正在开发一个django应用程序,它需要连接到2008。我使用django-pyodbc-azure后端。
环境:
我还安装了受抚养人: unixodbc unixodbc-dev tdsodbc freetds-dev
In /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()我可以从上面的代码中看到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)')我的设置有什么问题吗?
发布于 2019-02-05 12:29:20
如果您在这里搜索错误消息,让我强调,任何阻止登录的内容都会产生这个混乱。即使您忘记指定一个user。
对于实际的登录问题没有任何提示,错误消息会误导连接/主机解决问题。
此外,当指定不可解析的主机时,超时不会在合理的时间范围内发生(我等待了>5分钟),而且ctrl+c不能中断该操作。我不得不挂起python,而不是关闭后台作业。
发布于 2017-11-06 00:48:10
我想我自己已经解决了这个问题,尽管我遇到了另一个问题。
答案实际上在django-pyodbc-azure包文档中。
通过将'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
},
}
}https://stackoverflow.com/questions/47058119
复制相似问题