[英]How to Convert a data set from a database query to a specific JSON format for input to a REST api
我對 python 相當陌生,並且希望得到一些幫助來解決問題。
我有一個 SQL select 查詢,它返回一個帶有值的列。 我想將 header 請求中的記錄傳遞給 REST API 調用。 問題是 API 調用需要特定 JSON 格式的數據。
如何將查詢返回的數據轉換為如下所示的特定 JSON 格式?
從 SQL 查詢返回:
InfoId
------
1
2
3
4
5
6
我需要將這些值傳遞給 REST API 作為 JSON 格式如下:
{
"InfoId":[
1,2,3,4,5,6
]
}
我已經嘗試了幾個選項來解決這個問題。
我嘗試使用帶有各種方向參數的 pandas datatable.to_json 方法將數據轉換為 json,但它們都沒有返回所需的格式,如上所示。
import requests
import json
import pyodbc
import pandas as pd
conn = pyodbc.connect('Driver={SQL SERVER};'
'Server=myServer;'
'Database=TestDb;'
'Trusted_Connection=yes;'
)
cursor = conn.cursor()
sql_query = pd.read_sql_query('SELECT InfoId FROM tbl_info', conn)
#print(sql_query)
print(sql_query.to_json(orient='values', index=False))
url = "http://ldapiserver:5000/patterns/v1/swirl?idType=Info"
#sample payload
#payload = "{\r\n \"InfoId\": [\r\n 1,2,3,4,5,6\r\n ]\r\n}"
payload = sql_query.to_json(orient='records')
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=json.dumps(payload, indent=4))
resp_body = response.json()
print(resp_body)
print(response.elapsed.total_seconds())
我嘗試的第二種方法是將 SQL 查詢中的行轉換為列表 object ,然后形成 json 字符串。 它以這種方式工作,但我想自動化,以便不管查詢它可以用於 json 字符串。
import requests
import json
import pyodbc
conn = pyodbc.connect('Driver={SQL SERVER};'
'Server=myServer;'
'Database=TestDb;'
'Trusted_Connection=yes;'
)
cursor = conn.cursor()
cursor.execute("""
SELECT InfoId FROM tbl_info
""")
rows = cursor.fetchall()
# Convert query to row arrays
rowarray_list = []
for row in rows:
t = (row.InfoId)
rowarray_list.append(t)
j = json.dumps(rowarray_list)
conn.close()
txt = '{"InfoId": ', j, '}'
# print(txt)
payload = txt[0]+txt[1]+txt[2]
url = "http://ldapiserver:5000/patterns/v1/swirl?idType=Info"
# payload = "{\r\n \"InfoId\": [\r\n 72,74\r\n ]\r\n}"
#print(json .dumps(payload, indent=4))
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
resp_body = response.json()
print(resp_body)
print(response.elapsed.total_seconds())
感謝您對此的任何幫助。
謝謝你。
要將您的 SQL 查詢轉換為 JSON,
.
.
.
rows = cursor.fetchall()
# convert to list
json_rows = [dict(zip([key[0] for key in cursor.description], row)) for row in rows]
然后您可以根據需要返回您的回復
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.