[解決済み] FlaskでSQLAlchemyの結果セットをjsonifyする [重複].
質問
Flask/PythonでSQLAlchemyの結果セットをjson化しようとしています。
Flaskのメーリングリストでは、以下の方法が提案されていました。 http://librelist.com/browser//flask/2011/2/16/jsonify-sqlalchemy-pagination-collection-result/#04a0754b63387f87e59dda564bde426e :
return jsonify(json_list = qryresult)
しかし、以下のようなエラーが返ってきます。
TypeError: <flaskext.sqlalchemy.BaseQuery object at 0x102c2df90>
is not JSON serializable
私はここで何を見落としているのでしょうか?
こんな質問を見つけました。 SqlAlchemyの結果をJSONにシリアライズする方法は? という質問を見つけました。これは非常によく似ていますが、メーリングリストの投稿が示唆するように、Flaskがこれを簡単にする魔法を持っているかどうかは分かりませんでした。
編集:明確化のために、私のモデルは次のようになります。
class Rating(db.Model):
__tablename__ = 'rating'
id = db.Column(db.Integer, primary_key=True)
fullurl = db.Column(db.String())
url = db.Column(db.String())
comments = db.Column(db.Text)
overall = db.Column(db.Integer)
shipping = db.Column(db.Integer)
cost = db.Column(db.Integer)
honesty = db.Column(db.Integer)
communication = db.Column(db.Integer)
name = db.Column(db.String())
ipaddr = db.Column(db.String())
date = db.Column(db.String())
def __init__(self, fullurl, url, comments, overall, shipping, cost, honesty, communication, name, ipaddr, date):
self.fullurl = fullurl
self.url = url
self.comments = comments
self.overall = overall
self.shipping = shipping
self.cost = cost
self.honesty = honesty
self.communication = communication
self.name = name
self.ipaddr = ipaddr
self.date = date
どのように解決するのですか?
クエリが実行されていないようです。以下を試してみてください。
return jsonify(json_list = qryresult.all())
[編集]をクリックします。 : jsonifyの問題は、通常、オブジェクトは自動的にjsonifyできないことです。Pythonのdatetimeでさえも失敗します ;)
私が過去に行ったことは、追加のプロパティ(例えば
serialize
のような)追加のプロパティをシリアライズされる必要のあるクラスに追加することです。
def dump_datetime(value):
"""Deserialize datetime object into string form for JSON processing."""
if value is None:
return None
return [value.strftime("%Y-%m-%d"), value.strftime("%H:%M:%S")]
class Foo(db.Model):
# ... SQLAlchemy defs here..
def __init__(self, ...):
# self.foo = ...
pass
@property
def serialize(self):
"""Return object data in easily serializable format"""
return {
'id' : self.id,
'modified_at': dump_datetime(self.modified_at),
# This is an example how to deal with Many2Many relations
'many2many' : self.serialize_many2many
}
@property
def serialize_many2many(self):
"""
Return object's relations in easily serializable format.
NB! Calls many2many's serialize property.
"""
return [ item.serialize for item in self.many2many]
そして今、私ができることは、viewsです。
return jsonify(json_list=[i.serialize for i in qryresult.all()])
これが役に立つといいのですが ;)
[2019年版を編集する】をご覧ください。] : より複雑なオブジェクトや循環参照を使用する場合は、以下のようなライブラリを使用します。 マシュマロ ).
関連
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み] Flask-SQLAlchemyでidでレコードを削除する方法
-
[解決済み] Flask-SQLalchemy で行の情報を更新する
-
[解決済み] Flaskのリクエストで受信したデータを取得する
-
[解決済み] Flaskで静的ファイルを提供する方法
-
[解決済み] FlaskのビューからJSONレスポンスを返す
-
[解決済み] SQLAlchemy ORDER BY DESCENDING?
-
[解決済み] SQLAlchemy: flush() と commit() の違いは何ですか?
-
[解決済み】Flask-SQLAlchemyアプリで生のSQLを実行する方法
-
[解決済み] Flask SQLAlchemy クエリ、カラム名の指定
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
Pythonによるjieba分割ライブラリ
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】SqlAlchemyの結果をJSONにシリアライズする方法は?