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

使用Pyadomd库实现PowerBI数据转JSON接口遇异常求助

问题排查与解决方案:Flask接口404+PowerBI数据无法JSON输出

一、404错误排查与修复

出现404的核心原因大概率是路由访问不匹配,按以下步骤排查:

  • 检查访问路径的大小写:Flask路由默认严格区分大小写,你的路由是@app.route('/Alpino'),必须访问http://127.0.0.1:5000/Alpino(注意首字母大写),如果写成/alpino会直接返回404。
  • 确认Flask启动的访问地址:app.run()默认绑定127.0.0.1:5000,如果修改了端口(比如app.run(port=8000)),要对应调整访问端口。
  • 查看Flask启动日志:启动时会输出已注册的路由,确认日志中存在GET /Alpino的记录,若没有则说明路由未被正确注册(检查代码缩进,确保@app.route装饰器和get_data函数缩进正确)。

二、PowerBI数据无法JSON输出的修复

原代码中cur.fetchall()返回的是pyadomd原生结果集对象,无法被jsonify直接序列化,需要先转换为可序列化的字典/列表结构:

修改后的完整代码

from sys import path
path.append('\\Program Files\\Microsoft.NET\\ADOMD.NET\\160')

from pyadomd import Pyadomd
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/Alpino')
def get_data():
    conn_str = 'Provider=MSOLAP;User ID=Alexw@dettol.com;Data Source=powerbi://api.powerbi.com/v1.0/myorg/Power BI Model [Test];initial catalog=PBI_Model_20230121;Password=Alexw#2023;Persist Security Info=True;Impersonation Level=Impersonate;'
    query = """EVALUATE Project"""

    try:
        with Pyadomd(conn_str) as conn:
            cursor = conn.cursor()
            cursor.execute(query)
            # 获取列名
            columns = [col[0] for col in cursor.description]
            # 将结果转换为字典列表
            data = [dict(zip(columns, row)) for row in cursor.fetchall()]
            print(data)
            return jsonify(data)
    except Exception as e:
        # 捕获异常便于排查问题
        print(f"Error: {str(e)}")
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    # 开启调试模式(生产环境关闭)
    app.run(debug=True)

关键修改点

  • 结果集序列化处理:通过cursor.description获取查询结果的列名,再将每一行数据与列名绑定为字典,最终生成可被jsonify处理的列表结构。
  • 异常捕获:增加try-except块,捕获连接、查询过程中的错误,返回错误信息便于定位问题(比如认证失败、查询语句错误等)。
  • 调整cursor使用方式:将conn.cursor().execute(query)拆分为先获取cursor再执行,避免上下文管理可能带来的异常。

额外注意事项

  • 确认ADOMD.NET路径正确:path.append('\\Program Files\\Microsoft.NET\\ADOMD.NET\\160')需对应你的实际安装路径,若版本不同需调整160为对应版本号。
  • 连接字符串验证:若仍存在认证问题,检查用户ID、密码、数据源路径是否正确,PowerBI模型是否允许通过ADOMD访问,以及账号是否有对应模型的权限。

内容的提问来源于stack exchange,提问作者N-SPEC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:05:18