我已经创建了一个推送流数据集(历史记录已建立),并且使用“ Push URL”(我从相关数据集的“ API信息”选项卡中获取)从Python脚本向其发布数据。我还需要做的是删除历史数据,以便清除我的测试数据和/或能够根据需要重置数据集并从头开始重新填充。
推送网址的格式为https://api.powerbi.com/beta/xxxxxxxx/datasets/xxxxxxxxxxxx/rows?key=xxxxxxxxxxxxxxx
以下代码可以正常工作并发布数据;
import requests
import pyodbc as db
import pandas as pd
API_ENDPOINT = "https://api.powerbi.com/beta/xxxxxxxx/datasets/xxxxxxxxxxxx/rows?key=xxxxxxxxxxxxxxx"
dbcon = db.connect('DRIVER={SQL Server};SERVER=tcp:fxdb.database.windows.net;DATABASE=FXDatabase;UID=xxxx;PWD=xxxx')
df = pd.read_sql("select statement etc...", dbcon)
data = df.to_dict(orient='records')
response = requests.post(API_ENDPOINT, json=data)
但是添加这个:
response = requests.delete(API_ENDPOINT)
给我:
404
{
"error":{
"code":"","message":"No HTTP resource was found that matches the request URI 'http://api.powerbi.com/beta/...
我无法弄清楚这一点,所以我开始研究OAuth2身份验证,认为Auth URL仅用于 来发布数据。在https://dev.powerbi.com/apps注册应用后,我的代码现在如下所示:
import requests
import pyodbc as db
import pandas as pd
API_ENDPOINT = "https://api.powerbi.com/beta/xxxxxxxxxxxxxx/datasets/xxxxxxxxxxxxxxx/rows"
data = {
'grant_type': 'password',
'scope': 'openid',
'resource': r'https://analysis.windows.net/powerbi/api',
'client_id': 'xxxxxxxxx',
'username': 'xxxxxxxxx',
'password': 'xxxxxxxx'
}
response = requests.post('https://login.microsoftonline.com/common/oauth2/token', data=data)
access_token = response.json().get('access_token')
headers = {'Authorization': 'Bearer ' + access_token}
dbcon = db.connect('DRIVER={SQL Server};SERVER=tcp:fxdb.database.windows.net;DATABASE=FXDatabase;UID=xxxx;PWD=xxxx')
df = pd.read_sql("select statement etc...", dbcon)
data = df.to_dict(orient='records')
response = requests.post(API_ENDPOINT, json=data, headers=headers)
response = requests.delete(API_ENDPOINT, headers=headers)
身份验证有效,返回状态码200。POST返回401(与以前的方法一起使用),而DELETE仍返回404。
答案 0 :(得分:0)
感谢jonrsharpe向我指出了正确的方向。
重新访问API文档时,我发现了一个获取表名称的调用;
获取https://api.powerbi.com/v1.0/myorg/datasets/ {datasetKey} /表
所以我通过身份验证后就跑了;
response = requests.get("https://api.powerbi.com/v1.0/myorg/datasets/xxxxxxxx/tables", headers=headers)
响应的内容告诉我,我的数据集中有一个名为“ RealTimeData”的表,该表必须为默认名称,因为我没有有意创建此表。
我现在已将端点更新为;
API_ENDPOINT = "https://api.powerbi.com/v1.0/myorg/datasets/xxxxxxxxx/tables/RealTimeData/rows"
一切正常。
谢谢乔恩!