使用SqlAlchemy時如何方便的取得dict數據、dumps成Json

使用Sqlalchemy可以方便的從數據庫讀取出python對象形式的數據(吐槽:說實話對象形式也沒多方便,還不如我之前從關係型數據庫直接讀取出dict形式的數據用起來方便,具體參見我以前的文章http://zhengxiaoyao0716.lofter.com/post/1d6e9c56_93d6d00))

然而對象形式的數據是不方便直接進行http傳遞的,一般轉化成Json比較方便。而如果你直接對從數據庫取得的對象dumps或jsonify,會得到一個錯誤。Google一下其實是有不少解決方法的,那些方法很不錯,解決的也比較完美。但要我說就是麻煩了點。我的這個方法可能沒那麼完善,但大多數簡單情況下足以解決問題了。

首先,爲數據模型的基型添加一個方法(不知道是不是該這麼叫,總之就是你新建一個數據模型的類時繼承的那個類,我的叫做Base):

def column_dict(self):
    model_dict = dict(self.__dict__)
    del model_dict['_sa_instance_state']
    return model_dict
Base.column_dict = column_dict


這個方法幹嘛的呢?首先,copy數據對象的字典,然後去掉key爲'_sa_instance_state'這條記錄,沒錯,大部分情況下就是它阻止了我們dumps、jsonify的步驟。注意是對新copy的dict操作,否則就影響到數據庫本身的外鍵關聯就悲劇了~

那麼假設有一個繼承自該Base的Model,比如class User(Base):...,我們取得一個它的對象後,比如user = User.query.get(1),只要對user.column_dict()做dumps就好了。如果User有外鍵關聯什麼的,請自行先for ext in user.exts:...,然後把每一個ext的column_dict()添加到user_dict(user_dict = user.column_dict())因爲我懶~而且很多情況下其實沒必要取出全部關聯的數據。。。

好了就是這樣,一個簡單不完美卻很有效的解決技巧~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章