由于某种原因,我似乎无法连接到网络之外的任何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:固定上面的端口号。
我终于弄清楚了答案是什么(偶然地在尝试对连接到Azure上托管的SQL Server进行故障排除时)。如果SQL Server在网络外部连接,则PYODBC连接字符串需要端口号,而不是像其他SQL包所使用的那样假定默认端口号。只需添加'PORT=1433;'到连接字符串即可使连接正常工作。PYODBC似乎对何时使用和不希望使用默认端口进行连接很挑剔。
'PORT=1433;'