You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Action中Python查询Azure Data Warehouse失败求助

GitHub Action连接Azure Data Warehouse的驱动/超时问题解决方法

问题分析

  1. 驱动缺失错误:
    你在GitHub Action里只装了unixodbc基础依赖,但Ubuntu默认没有SQL Server这个驱动,自然会提示找不到库文件。

  2. 超时错误:
    换用官方驱动后出现超时,主要是这几个原因:

    • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:41:00