postgres 查詢回傳 json 陣列,我試圖將其轉儲到 json 檔案中。
query = f"""
SELECT array_to_json(array_agg(results))
FROM
(SELECT * from lookup_brands limit 1000) as results
"""
json_results = exec_query(self.conn_string, query)
print(json_results) # outputs <sqlalchemy.engine.cursor.LegacyCursorResult object at 0x7f30d64bd8b0>
print(type(json_results) # outputs <class 'sqlalchemy.engine.cursor.LegacyCursorResult'>
我試著json_results像這樣寫json:
with open(output_path, 'w') as outfile:
json.dump(json_results, outfile)
我得到這個錯誤
error Object of type LegacyCursorResult is not JSON serializable
這是預期的。
如何將此 json 陣列結果轉儲到檔案中?
uj5u.com熱心網友回復:
SQLAlchemy 的LegacyCursorResult物件是結果集的迭代器,結果中的值被轉換為它們的 Python 等價物。您需要創建一個可以自己從結果中序列化的物件,例如:
with engine.connect() as conn:
result = conn.execute(sql)
print(json.dumps([dict(row) for row in result.mappings()]))
這似乎很浪費,因為 Postgresql 已經序列化了資料。我們可以通過將查詢結果轉換到text資料庫端來解決這個問題,以便我們將其作為有效的 JSON 接收str:
sql = """\
SELECT array_to_json(array_agg(results))::text AS data
FROM
(SELECT * FROM t70692551) AS results
"""
with engine.connect() as conn:
result = conn.execute(sql)
print(result.scalar_one())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/410425.html
標籤:
