2017-02-21 56 views
0

因此,我正在學習如何構建一個瓶頸web服務,並從一些類似的代碼開始。將非標準類型的查詢結果序列化爲JSON的Pythonic方法

#... 
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} 

該代碼正常工作,但我的直覺告訴我必須有更好的方式來編寫它。但是,我不知道如何繼續...

如何利用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結果集),請確保您分離或使它們爲瞬態,以避免出現問題。

相關問題