我已经在Spyder中运行了我的代码,但没有收到错误。当我在Ubuntu VM中运行相同的python3代码时,收到以下错误:Traceback (most recent call last): File "Script - Full.py", line 40, in conn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';DATABASE='+database+';Trusted_Connection='+trusted) pyodbc.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)') 该错误所指的当前代码是:
server = 'SERVER_NAME'
database = 'DATABASE_NAME'
trusted = 'yes'
driver= '{ODBC Driver 17 for SQL Server}'
conn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';DATABASE='+database+';Trusted_Connection='+trusted)
我只是在尝试连接数据库并读取其中的值的地方
当我使用Windows身份验证时,在我的本地PC上运行,但是当我在VM中运行此代码时,会出现上述错误?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这个错误信息表明你的Python脚本在尝试通过ODBC连接到SQL Server时遇到了登录超时的问题。这通常意味着你的VM中的Python环境在尝试与数据库服务器建立连接时,由于某种原因无法及时完成身份验证过程。以下是一些可能的解决方案和排查步骤:
网络问题:首先检查你的Ubuntu VM是否能够访问到SQL Server所在的网络。可以尝试ping SQL Server的IP地址来测试网络连通性。
驱动程序问题:确认ODBC Driver 17 for SQL Server是否已正确安装在你的Ubuntu VM上,并且版本兼容。你可以通过运行odbcinst -j
命令来查看已安装的ODBC驱动程序。
防火墙/安全组设置:确保SQL Server的防火墙或云服务(如果适用)的安全组规则允许来自你的VM IP的连接。特别是当使用Azure SQL Database或AWS RDS等云托管数据库时,需要正确配置安全组规则。
连接字符串格式:你的连接字符串格式似乎有误,应该用正确的字符串插值或拼接方式。修改代码如下:
conn_str = f'DRIVER={{{driver}}};SERVER={server};DATABASE={database};Trusted_Connection={trusted}'
conn = pyodbc.connect(conn_str)
注意使用了f-string来构造字符串,并且在{}
内对driver
变量进行了正确的转义。
身份验证方式:你提到在本地使用Windows身份验证成功,但在VM中失败。这可能是因为VM不支持或未配置Windows身份验证。考虑改为使用SQL Server认证,即提供用户名和密码。修改连接字符串为:
user = 'your_username'
password = 'your_password'
conn_str = f'DRIVER={{{driver}}};SERVER={server};DATABASE={database};UID={user};PWD={password}'
conn = pyodbc.connect(conn_str)
端口开放:确保SQL Server正在监听的TCP端口(默认是1433)没有被阻止,并且在连接字符串中指定端口(如果非默认)。
SQL Server配置:检查SQL Server的远程连接是否启用,以及是否允许来自你VM的IP地址的连接。
逐一排查上述点,应该能帮助你定位并解决连接超时的问题。