GitHub Action中Python查询Azure Data Warehouse失败求助
GitHub Action连接Azure Data Warehouse的驱动/超时问题解决方法
问题分析
驱动缺失错误:
你在GitHub Action里只装了unixodbc基础依赖,但Ubuntu默认没有SQL Server这个驱动,自然会提示找不到库文件。超时错误:
换用官方驱动后出现超时,主要是这几个原因:- GitHub Action的出站IP不在Azure数据仓库的防火墙白名单里
- 本地用的
TRUSTED_CONNECTION=YES在Linux环境不生效,Windows集成身份验证不适用于Linux - 服务器地址格式不完整,缺少必要的后缀或端口
分步解决
1. 安装官方SQL Server ODBC驱动
替换GitHub Action里的驱动安装步骤,安装微软官方的ODBC Driver 17:
- name: Install ODBC Driver for SQL Server run: | sudo su curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list exit sudo apt-get update sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17
如果用的是Ubuntu 22.04,把上面的20.04改成22.04即可。
2. 修改连接字符串适配Linux与Azure AD认证
本地的连接配置不适合Linux环境,改用Azure AD密码认证方式:
def query_all_from_table(self, database, table): connection_string = ( 'DRIVER={ODBC Driver 17 for SQL Server};' 'SERVER=azr-warehouse.database.windows.net,1433;' # 补全后缀和端口 f'DATABASE={database};' f'UID={os.getenv("AZURE_USER")};' f'PWD={os.getenv("AZURE_PW")};' 'Authentication=ActiveDirectoryPassword;' # 指定Azure AD密码认证 'Connection Timeout=60;' ) try: conn = pyodbc.connect(connection_string) sql_query = f"SELECT * FROM {table}" data = pd.read_sql(sql_query, conn) conn.close() return data except pyodbc.Error as e: print('Error connecting to Azure Data Warehouse:', e) return pd.DataFrame()
注意点:
- 驱动名称要加大括号,Linux环境下必须这么写
- 服务器地址必须带上
.database.windows.net和默认端口1433 - 新增
Authentication=ActiveDirectoryPassword参数,适配你的SSO凭据
3. 开放Azure数据仓库防火墙
GitHub Action的IP是动态的,有两种处理方式:
- 临时测试:在Azure Portal进入数据仓库的「防火墙和虚拟网络」,勾选「允许Azure服务和资源访问此服务器」,快速验证是否是防火墙问题。
- 生产环境:GitHub会定期发布Action的IP范围,你可以把这些IP批量添加到防火墙白名单;或者用Azure Functions做中间层,通过VNet连数据仓库,再让GitHub Action调用函数。
内容的提问来源于stack exchange,提问作者Fruity Fritz
相关产品推荐
相关产品推荐

