使用SqlAlchemy时如何方便的取得dict数据dumps成Json

Posted 枫飞飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SqlAlchemy时如何方便的取得dict数据dumps成Json相关的知识,希望对你有一定的参考价值。

使用Sqlalchemy可以方便的从数据库读取出python对象形式的数据(吐槽:说实话对象形式也没多方便,还不如我之前从关系型数据库直接读取出dict形式的数据用起来方便,具体参见我以前的文章http://zhengxiaoyao0716.lofter.com/post/1d6e9c56_93d6d00))

然而对象形式的数据是不方便直接进行http传递的,一般转化成Json比较方便。而如果你直接对从数据库取得的对象dumps或jsonify,会得到一个错误。Google一下其实是有不少解决方法的,那些方法很不错,解决的也比较完美。但要我说就是麻烦了点。我的这个方法可能没那么完善,但大多数简单情况下足以解决问题了。

首先,为数据模型的基型添加一个方法(不知道是不是该这么叫,总之就是你新建一个数据模型的类时继承的那个类,我的叫做Base):

 

  1. def column_dict(self):  
  2.     model_dict = dict(self.__dict__)  
  3.     del model_dict[\'_sa_instance_state\']  
  4.     return model_dict  
  5. 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())因为我懒~而且很多情况下其实没必要取出全部关联的数据。。。

好了就是这样,一个简单不完美却很有效的解决技巧~~~

以上是关于使用SqlAlchemy时如何方便的取得dict数据dumps成Json的主要内容,如果未能解决你的问题,请参考以下文章

Python笔记-SQLAlchemy Model转dict(主流方法,一行解决)

SQLAlchemy(psycopg2.ProgrammingError)无法适应类型'dict'

奇怪的 SQLAlchemy 错误消息:TypeError: 'dict' object does not support indexing

python sqlalchemy的对象转换成dict

SQLAlchemy execute() 将 ResultProxy 作为元组返回,而不是 dict

如何实现可变更新时自动更新的可变PickleTypes