Python pyodbc.OperationalError:SQL Server不存在或访问被拒绝。(17) (SQLDriverConnect);[08001]ODBC SQL Server驱动程序][

Python pyodbc.OperationalError:SQL Server不存在或访问被拒绝。(17) (SQLDriverConnect);[08001]ODBC SQL Server驱动程序][,python,sql-server,pyodbc,Python,Sql Server,Pyodbc,我整天都在网上搜索,尝试了许多解决方案,但没有一个有效。我可以手动连接到此服务器,但不能使用Python。我收到以下错误: pyodbc.OperationalError:('08001','[08001][Microsoft][ODBC SQL 服务器驱动程序][DBNETLIB]SQL Server不存在或访问被拒绝。 (17) (SQLDriverConnect);[08001][Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]连接打开(Connect(

我整天都在网上搜索,尝试了许多解决方案,但没有一个有效。我可以手动连接到此服务器,但不能使用Python。我收到以下错误:

pyodbc.OperationalError:('08001','[08001][Microsoft][ODBC SQL 服务器驱动程序][DBNETLIB]SQL Server不存在或访问被拒绝。 (17) (SQLDriverConnect);[08001][Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]连接打开(Connect())(5);[08001] [Microsoft][ODBC SQL Server驱动程序]连接字符串属性无效 (0)

我尝试了以下方法:

  • (A)

  • (B)


我猜你需要更像这样的东西:

cnx = pyodbc.connect('DRIVER={SQL Server};SERVER='+self.DBserver+';DATABASE=xyz;UID='+self.DBusername+';PWD='+self.DBpassword)

问题是防火墙。它现在正在工作

您的第二个示例将无法正常工作,因为您将传递文本
self.DBusername
而不是该属性的值。但是,您的第二个示例确实使用了正确的属性名
UID=
PWD=
。此外,Microsoft的ODBC驱动程序不使用e> PORT=,但您已将端口显示为1433,因此这可能不重要,因为这是默认值。请使用
f''string'
尝试第二种方法,看看是否有帮助。因此,我添加了A、B、C尝试上面的Try C是您的建议,但没有帮助。除非我不理解您的方法,否则请尝试硬编码参数值。它会被忽略ght
self
变量不会传播。下次,请尝试与SSMS、Azure Data Studio(尽管名称不同,但它是数据库的VS代码)或之类的客户端工具连接。大多数情况下,错误是正确的
cnx = pyodbc.connect('''Driver={SQL Server}; 
                     SERVER=tcp:<self.DBserver>; 
                     PORT=self.DBPort; DATABASE=xyz; 
                     UID=self.DBusername; 
                     PWD=self.DBpassword''')
cnx = = pyodbc.connect(Driver='{SQL Server}',
                       SERVER=self.DBserver,
                       DATABASE=xyz,
                       UID=self.DBusername,
                       PWD=self.DBpassword)
cnx = pyodbc.connect('DRIVER={SQL Server};SERVER='+self.DBserver+';DATABASE=xyz;UID='+self.DBusername+';PWD='+self.DBpassword)