簡體   English   中英

如何將數據集從數據庫查詢轉換為特定的 JSON 格式以輸入到 REST api

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM