我读到,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)')
我四处寻找答案,但还是一片空白。非常感谢任何帮助:)
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 连接,这在代码部署方面比您的租户稍领先。
没有足够的声誉来发表评论,但我最初从大卫·布朗的回答中得到了同样的错误。我必须从 Linux 进行更改,因为 ActiveDirectoryInteractive 仅适用于 Windows。可以确认这在 Microsoft 内部系统之外有效。