编写Python脚本把sqlAlchemy对象转换成dict的教程

yipeiwu_com6年前Python基础

在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操作ORM对象更为方便,毕竟不用管数据库session的状态了。

假设数据库里有一张post表,其中一种方法就是

p = session.query(Post).first()
p.__dict__

但由于p是sqlAlchemy的对象,所以p.__dict__中会有一些其他的属性比如_sa_instance这种我们不需要关注的

那么我们可以给model的基类加一个方法,假设models.py中原来是这样

Base = sqlalchemy.ext.declarative.declarative_base()

class Post(Base):
  __tablename__ = 'post'
  id = Column(Integer, primary_key=True)
  title = Column(String)

那么我们可以加一个to_dict()方法到Base类中

def to_dict(self):
  return {c.name: getattr(self, c.name, None) for c in self.__table__.columns}

Base.to_dict = to_dict

这样就可以

p = session.query(Post).first()
p.to_dict()

当然,如果model没有和table绑定的话model里是没有__table__的信息的,可能也会出问题,不过我目前觉得这样最方便了

相关文章

在Python中构建增广矩阵的实现方法

麻烦的 # TODO 构造增广矩阵,假设A,b行数相同 def augmentMatrix(A, b): if(len(A) != len(b)): raise 'The...

Python中最大递归深度值的探讨

Python中最大递归深度值的探讨

Python对递归函数设置是有默认值。 可以通过下面命令来查看设置的默认值 >>> import sys >>> sys.getrecursion...

使用XML库的方式,实现RPC通信的方法(推荐)

使用XML库的方式,实现RPC通信的方法(推荐)

1、先说结论:使用xml-rpc的机制可以很方便的实现服务器间的RPC调用。 2、试验结果如下: 3、源码如下: 服务器端的源代码如下: import operator, math...

python dataframe 输出结果整行显示的方法

在使用dataframe时遇到datafram在列太多的情况下总是自动换行显示的情况,导致数据阅读困难,效果如下: # -*- coding: utf-8 -*- import nu...

Python发送以整个文件夹的内容为附件的邮件的教程

由于我经常需要备份文件夹下的内容到邮件里面,每个打开邮件,上传文件,发送,太过麻烦,其实每次发送的文件都是放在固定 置的,只是邮件标题不同而已,于是用 python 为自己写了个发送文件...