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

Python连接Power BI XMLA端点二次运行报错如何解决

问题原因
  • 核心是MSOLAP COM驱动的资源未在第一次连接关闭后完全释放,底层COM对象残留导致第二次连接初始化冲突
  • 多行连接字符串里的多余换行符被传入驱动,部分版本的MSOLAP解析时会出现异常
  • adodbapi的close()方法仅关闭逻辑连接,不会主动清理底层COM引用,需要额外释放资源
具体修改方案
  • 连接字符串改为单行,避免多余换行符干扰驱动解析
  • 连接操作使用with上下文管理器,自动处理连接关闭逻辑,避免手动close漏执行的问题
  • 每次连接关闭后显式触发垃圾回收,清理残留的COM对象引用
修改后的可运行代码
import adodbapi
import gc

def connect_and_print(input_str):
    print("Function starting...", input_str)
    # 连接字符串改为单行,去掉多余换行
    conn_str = "Provider=MSOLAP;Identity Provider=https://login.microsoftonline.com/common, https://analysis.windows.net/powerbi/api, 929d0ec0-7a41-4b1e-bc7c-b754a28bddcc;Data Source=pbiazure://api.powerbi.com;Initial Catalog=[dataset_id];User Id=[username];Password=[pass];"
    
    # 使用with上下文自动管理连接生命周期
    with adodbapi.connect(conn_str) as conna:
        # 示例查询
        print('The tables in your database conn are:')
        for name in conna.get_table_names():
            print(name)
    
    # 显式触发垃圾回收,清理底层COM对象残留
    gc.collect()
    print("Function finished", input_str)

# 两次调用均可正常运行
connect_and_print("first pass")
connect_and_print("second pass")
补充说明

若仍偶发连接失败,可在两次调用之间添加1~2秒的休眠,给驱动足够的资源释放时间;同时建议升级到最新版MSOLAP驱动,旧版本驱动存在已知的连接复用Bug。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:54:06