![](/img/trans.png)
[英]sqlalchemy-datatables TypeError: Object of type Customer is not JSON serializable
[英]TypeError: Object of type ResultProxy is not JSON serializable: result in sqlalchemy query?
我正在嘗試在 sqlalchemy 中查詢這樣的表中的 3 個字段:
if request.method == 'GET':
search_form = SearchForm()
result = dbSession.execute(
"SELECT * FROM books WHERE (isbn LIKE '%:text%') OR (title LIKE '%:text%') OR (author LIKE '%:text%') LIMIT 10",
{ "text": search_form.searchText.data }
)
return jsonify({'result': result})
我的查詢正確嗎? 為什么我會有這個錯誤?
類型錯誤:ResultProxy 類型的對象不是 JSON 可序列化的
簡單的錯誤說result
不是字典。 要解決它:
jsonify({'result': [dict(row) for row in result]})
它將每一行轉換為字典。
我遇到了這個錯誤,最初有點令人困惑,所以可能值得進一步解釋。
SQLAlchemy SQL 查詢的結果是一個列表(您可以使用type(results)
進行檢查),這很令人困惑,因為通常您可以將列表直接添加到字典中並jsonify
。 此外,它看起來像一個元組列表,通常也會被jsonify
接受。
但這是關鍵:它實際上是 SQLAlchemy 的 ResultsProxy 類型的對象列表 - 因此是錯誤。
因此錯誤是因為它是一個非 jsonify-able 類型的列表。 但是,您也可以選擇將其轉換為列表,然后將該列表包含在字典中,而不必將其轉換為字典,如上面的 metmirr 的回答。 兩種方法都沒有對錯,但如果您習慣於從 psycopg2 獲取元組列表,則此方法可能更符合您通常的工作流程:
results = [list(row) for row in result]
result_dict = {'results': results}
return jsonify(results_dict)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.