通过 API 从云上的 DB2 获取 SQL 结果到 Power Query

Posted

技术标签:

【中文标题】通过 API 从云上的 DB2 获取 SQL 结果到 Power Query【英文标题】:Get SQL results from DB2 on cloud to Power Query via API 【发布时间】:2021-09-09 20:18:00 【问题描述】:

我尝试通过 Excel Power Query 连接到云上的 db2。

基于documentation,这是 curl 请求的格式:

curl -X POST   https://hostname.com/dbapi/v4/sql_query_export   -H 'authorization: Bearer MyToken'   -H 'content-type: text/csv'   -d '"command":"select * from mytable"'

我试图通过 GUI 去,但这给了我错误

我很确定我做的不对,但我什至无法谷歌如何传递我的参数。

有人可以指导如何为此组装 M 代码吗?

我根据@nfgl 的回答试过了

let
    body  = [#"command"="select * from mytable"]
    ,json = Json.FromValue(body)
    ,wc = Web.Contents("https://hostname.com/dbapi/v4/sql_query_export", [Headers=[#"content-type"="text/csv", authorization="Bearer XXX"]])
    ,Source = Csv.Document(wc,[Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.Csv])
in
    Source

但是不能匿名绕过凭据 ui:

当我尝试使用令牌的 Web API 时:

顺便说一句,一切都适用于 python:

import http.client

conn = http.client.HTTPSConnection("hostname.com")

payload = "\"command\":\"select * from mytable\""

headers = 
    'content-type': "text/csv",
    'authorization': "Bearer XXX"
    

conn.request("POST", "/dbapi/v4/sql_query_export", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

【问题讨论】:

您可能想从您的问题中删除凭据... 那些是假的,但还是谢谢。 【参考方案1】:

不能通过 GUI 来做,命令 JSON 必须在请求内容中,并且 content-type 是你发送的那个,即 JSON,打开高级编辑器并做这样的事情

let
    url = "https://showcase.api.linx.twenty57.net/UnixTime/fromunixtimestamp",
    body  = [#"UnixTimeStamp"= 1589772280, #"Timezone"=""],
    json = Json.FromValue(body),
    wc = Web.Contents(url, [Headers=[#"Content-Type"="application/json"], Content=json]),
    Source = Csv.Document(wc,[Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.Csv])
in
    Source

【讨论】:

非常感谢您的指导。但是仍然无法通过 PQ 凭据 UI。我尝试更新了我的问题。 @MichalPalko 抱歉帮不上忙

以上是关于通过 API 从云上的 DB2 获取 SQL 结果到 Power Query的主要内容,如果未能解决你的问题,请参考以下文章

将 Python Flask Web 服务器应用程序连接到 DB2

如何通过SQL从IBM db2中的查询中获取列名

IBM Db2 on Cloud 中使用的 SQL 方言是啥

DB2 SQL 通过评估具有两种类型条目的 ID 过滤查询结果

从 DB2 中的表中获取值

如何从 DB2 获取描述性错误消息?