是否可以使用 pyodbc 从 Power BI 数据集市导出数据?

问题描述 投票:0回答:3

我读到,Power BI Datamarts 在底层是一个 Azure SQL 数据库。因此,我认为可以使用 Python 的 pyodbc 包从 Power BI Datamart 中提取数据。

我按照 Microsoft 的快速入门教程连接到 Azure SQL 数据库,但未能取得很大进展。鉴于我对 Python 有点新手,我想知道我的失败是否与实际限制有关,或者只是我的糟糕代码。

这是我的代码:

server = 'xxxxxxxxxxxxx.datamart.pbidedicated.windows.net'
database = 'xxxxxxxxxx'
username = '[email protected]'
password = 'xxxxxxxxxx'   
driver= 'ODBC Driver 18 for SQL Server'

with pyodbc.connect('DRIVER='+driver+';SERVER=tcp:'+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT TOP 3 name, collation_name FROM sys.databases")
        row = cursor.fetchone()
        while row:
            print (str(row[0]) + " " + str(row[1]))
            row = cursor.fetchone()

我得到的错误如下:

操作错误:('08S01','[08S01] [Microsoft][ODBC Driver 18 for SQL Server]TCP 提供程序:现有连接被远程主机强制关闭。 (10054) (SQLDriverConnect); [08S01] [Microsoft][ODBC Driver 18 for SQL Server]通信链接失败 (10054); [08S01] [Microsoft][SQL Server 的 ODBC 驱动程序 18]连接字符串属性无效 (0)')

我四处寻找答案,但还是一片空白。非常感谢任何帮助:)

python powerbi azure-sql-database pyodbc
3个回答
1
投票

我刚刚检查过,目前此功能确实存在限制(仍处于预览阶段)。如此处所述,只能使用版本 18 的 SSMS 连接到数据集市,因为它包含列入白名单的 applicationId。

但是,即使 pyodbc 是受支持的类型,您的代码也永远不会运行,因为 azure ad auth 是唯一受支持的身份验证方法。请参阅此处,理论上这将如何工作(适用于任何其他 azure sql 实例)


1
投票

ODBC 现在似乎可以工作了。

在 SQL (TDS) 端点中,至少目前,数据库名称与数据集市名称不同。 并且您必须使用 AAD 身份验证类型

您可以这样发现数据库名称:

import pyodbc

server = '<yourconnectionstring>.datamart.pbidedicated.windows.net'
database = 'master'
driver= 'ODBC Driver 18 for SQL Server'

with pyodbc.connect('DRIVER='+driver+';SERVER='+server+';DATABASE='+database+';Authentication=ActiveDirectoryInteractive') as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT TOP 3 name, collation_name FROM sys.databases")
        row = cursor.fetchone()
        while row:
            print (str(row[0]) + " " + str(row[1]))
            row = cursor.fetchone()

注意,我只在 Microsoft 内部租户中测试了 ODBC 连接,这在代码部署方面比您的租户稍领先。


0
投票

没有足够的声誉来发表评论,但我最初从大卫·布朗的回答中得到了同样的错误。我必须从 Linux 进行更改,因为 ActiveDirectoryInteractive 仅适用于 Windows。可以确认这在 Microsoft 内部系统之外有效。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.