簡體   English   中英

TypeError:ResultProxy 類型的對象不是 JSON 可序列化的:導致 sqlalchemy 查詢?

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

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