SAP Analytics云OData到SQL Server(通过Python)

2024-05-20 11:00:17 发布

您现在位置:Python中文网/ 问答频道 /正文

很长一段时间以来,我只是一名读者——现在我需要成为一名作家,因为这似乎是这个问题第一次出现(希望不是)

我正试图通过OData服务从SAP Analytics云中获取一些数据。我有一个URL和一个帐户来从中提取数据。最后,我想将这些数据存储到SQL Server中,但现在这还远远不够

我正在努力导出数据。以下是场景:

我已通过邮递员尝试过,并已检索到数据,例如,这是该服务的URL:

https://system.org/sap/opu/odata4/sap/cdi_cds/cdi_cds/sap/MasterData?$filter=Campaign eq '1234'

输出如下:

{
    "@odata.context": "$metadata#MasterData",
    "@odata.metadataEtag": "W/\"20201031071842\"",
    "value": [
        {
            "Campaign": "1234",
            "ExternalCampaignID": "",
            "ExternalCampaignName": "",
            "ExternalCampaignUUID": "00000000000000000000000000000000",
            "AgeRangeUpperLimit": 0,
            "AgeRangeLowerLimit": 0,
            "InteractionReason": "PERMISSION_MISSING",
            "InteractionStatus": "",
            "InteractionType": "OUTBOUND_CHCK_FAILED",
            "OrderAmount": 0.00}
    ]
}

所以在最后,我只想有一个包含从活动到订单金额的所有字段的表

目前我的Python代码是这样的(我对Python非常非常陌生):

import http.client
import pandas as pd
import json

conn = http.client.HTTPSConnection("system.org")
payload = ''
headers = {
  'Authorization': 'is done',
  'Cookie': 'is done',
  'Accept': 'application/json'
}
conn.request("GET", "sap/opu/odata4/sap/cdi_cds/cdi_cds/sap/MasterData?$filter=Campaign eq '1234'", payload, headers)
res = conn.getresponse()
result = res.read()

df = pd.read_json(result)
print(df)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.max_colwidth', 0)
df_new = str(df['value'])
print(df_new)

第一次打印(df)给了我以下结果:

           @odata.context  ...                                              value
0    $metadata#MasterData  ...  {'Campaign': '1234...

因此,所有相关列似乎都在一列中。我已经尝试将数据集缩减到第三列,这很有效,但现在我不知道如何继续。 我现在有以下一行(只是一个片段):

0      {'Campaign': '1234', 'CampaignID': '62', 'CampaignName': 'Facebook-Kampagne Test OF 1'}

谁能帮帮我吗?我认为最终将其写入SQL Server并不是什么大问题,因为有一个解决方案

非常感谢! 道路跑道


Tags: 数据importjsondfvaluedisplaypdoption