2017-02-21 11 views
0

フラスコウェブサービスを構築する方法を学習しており、このようなコードを使い始めました。非標準型のクエリ結果をJSONにシリアライズする

#... 
class Objects(Resource) : 
    def get(self) : 
     conn = engine.connect() 
     query = conn.execute("SELECT * FROM objects") 
     return {'objects' : [dict(zip(tuple(query.keys()), i)) for i in query.cursor]} 

api.add_resource(objects, '/objects')` 
#... 

これは、上記の例とシリアライズできなかった小数点として表されたデータベース内のフィールドを持つテーブルを見つけるまでは問題ありませんでした。

私はうんざりして、次のことを考え出しました。コードが正常に動作しますが、私の腸は私に言っているそれを書くためのより良い方法が存在しなければならないこと

class object(Resource) : 
    def get(self): 
     conn = engine.connect() 
     query = conn.execute("SELECT * FROM objects") 
     objects = [] 
     for row in query: 
      object = {} 
      for key in query.keys() : 
       if(type(row[key]) is decimal.Decimal) : 
        object[key] = float(row[key]) 
       else : 
        object[key] = row[key] 
      objects.append(object)  

     return {'objects': objects} 

。しかし、私はPythonに新しいですが、私はどのように進むべきかわかりません...

pythonsの機能とクラスライブラリを利用して、もっとpythonicな方法で、上記のケースをどう扱うでしょうか?

+0

を使用してください。しかし、そのほとんどは、このサイトの代わりにhttp://codereview.stackexchange.comを使用しています。 –

+0

私はcodereview.stackexchange.comサイトを認識していませんでした。このタイプの質問には今後これを使用します。 – earnshae

答えて

0

https://jsonpickle.github.io/は、PythonオブジェクトをJSON文字列にシリアル化するためのまともなライブラリです。

import jsonpickle 
json_str = jsonpickle.encode(obj) 

また、後でデコードする方法もあります。

SQLAlchemyモデルインスタンス(またはSQL結果セット)をシリアル化する場合は、問題を回避するために一時的にデタッチするか、一時的にするかを確認してください。

関連する問題