pyodbc.connect与FreeTDS连接需要显式的PORT = 1433;

时间:2015-02-12 19:04:47

标签: pyodbc freetds unixodbc

我在CentOS 2.6中的python 2.7上运行了一个连接到Sql erver数据库的python脚本:

pyodbc.connect("DRIVER=FreeTDS;SERVER=someServer;DATABASE=someDb;UID=myUser;PWD=superSecret;CHARSET=UTF8;TDS_Version=7.2")

该调用将失败,并显示以下内容:pyodbc.Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

freetds trace会说login.c:436:invalid port number

添加PORT=1433;将导致连接成功,即使这是默认端口号,我将以下内容添加到我的freetds.conf中:

[全球]         #TDS协议版本         tds版本= 7.0         port = 1433

如何使FreeTDS尝试将端口1433作为默认端口,以便我不必在查询字符串中设置它?

1 个答案:

答案 0 :(得分:0)

而不是这样,正如你所说:

pyodbc.connect("DRIVER=FreeTDS;SERVER=someServer;DATABASE=someDb;UID=myUser;PWD=superSecret;CHARSET=UTF8;TDS_Version=7.2")

...您可以将这些值放在连接字符串中,如下所示:

pyodbc.connect("DRIVER={FreeTDS};SERVER=someServer;PORT=1433;DATABASE=someDb;UID=myUser;PWD=superSecret;TDS_Version=7.2;CHARSET=UTF8")

对于你的freetds.conf配置:

[global]
    client charset = UTF-8
    tds version = 7.2

[someServer]
    host = someServer
    port = 1433
    tds version = 7.2

这两种方式一直对我有用。

另一方面,我已经开始使用这个由Microsoft专门为RedHat和CentOS制作的驱动程序(虽然我不知道它是否适用于与您相同的版本):

https://msdn.microsoft.com/en-us/library/hh568451%28v=sql.110%29.aspx

祝你好运!