无法使用PYODBC连接到网络外部的远程SQL Server

时间:2014-07-20 20:45:23

标签: python sql sql-server pyodbc freetds

我出于某种原因似乎无法连接到我们网络之外的任何SQL Server,但如果我通过VPN在网络中,则没有问题。我的代码就像本地连接一样:

sql = pyodbc.connect(
    'DRIVER={FreeTDS};'
    'SERVER=192.168.1.xx\ROA;'
    'DATABASE=RentalDB;'
    'UID=xxxxxxx;'
    'PWD=xxxxxxx'
)

以下是我正在尝试远程的:

sql = pyodbc.connect(
    'DRIVER={FreeTDS};'
    'SERVER=69.178.xx.xx/ROA;'
    'DATABASE=RentalDB;'
    'UID=xxxxxxxx;'
    'PWD=xxxxxxxx'
)

尝试连接时,大约15秒左右后我抛出以下错误:

  

pyodbc.Error:('08001','[08001] [unixODBC] [FreeTDS] [SQL Server]无法使用   连接到数据源(0)(SQLDriverConnect)')

我能够通过SQL Server Management Studio成功连接,我们有一个C#开发人员,建立连接没有问题,但出于某种原因,我不能。我正在运行Python 2.7,Debian 7,FreeTDS 0.91和PYODBC 3.0.7。我认为SQL Server版本是2012。有什么想法吗?

编辑:在远程连接上,我尝试了以下'SERVER ='字符串:

69.178.xx.xx/ROA
69.178.xx.xx\ROA
mssql://69.178.xx.xx/ROA
mssql://69.178.xx.xx\ROA
69.178.xx.xx:1433/ROA
69.178.xx.xx:1433\ROA
mssql://69.178.xx.xx:1433/ROA
mssql://69.178.xx.xx:1433\ROA

并且所有这些都返回相同的错误。

编辑2:修正了上述内容的端口号。

1 个答案:

答案 0 :(得分:3)

我终于找到了答案(在尝试同时解决连接到Azure上托管的SQL Server时遇到的问题)。 PYODBC连接字符串,如果连接到SQL Server所在的网络外部,则需要端口号,而不是像其他SQL包一样使用默认值。只需将'PORT=1433;'添加到连接字符串即可使连接正常工作。 PYODBC似乎很挑剔,并且不想使用默认端口进行连接。