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

标签 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]Unable to connect to data source (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 时的意外)。 PYODBC 连接字符串,如果连接到 SQL Server 所在的网络外部,则需要一个端口号,而不是像其他 SQL 包使用的那样假定默认值。只需将 'PORT=1433;' 添加到连接字符串即可使连接正常工作。 PYODBC 似乎对何时使用和不想使用默认端口进行连接很挑剔。

关于python - 无法使用 PYODBC 连接到网络外部的远程 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24854745/

相关文章:

python - 如何读取本身位于 zip 文件内的文件夹内的文件

sql - 如何解决 SQL0418N 错误

mysql - 如何选择获得超过特定票数的帖子?

sql - 使用oracle触发器更新条件已存在的第二个表

python - Matplotlib - 对数刻度,但需要非对数标签

python - 将 QListView 与 Pyside 中定义的模型一起使用

python - 通过 Tkinter 条目将数据插入数据库

sql-server - 优化器如何处理对具有相同参数值的标量函数的调用?

c# - 尝试在 C# WPF 应用程序中捕获

SQL Server LCK_M_S 仅在生产中发生