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


Posted in Python onMay 29, 2015

在用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 相关文章推荐
python开发之文件操作用法实例
Nov 13 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
Python获取当前函数名称方法实例分享
Jan 18 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
May 26 Python
利用anaconda保证64位和32位的python共存
Mar 09 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
Django values()和value_list()的使用
Mar 31 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
Python可以用来做什么
Nov 23 Python
Python如何使用logging为Flask增加logid
Mar 30 Python
Python fileinput模块使用实例
May 28 #Python
Python sys.argv用法实例
May 28 #Python
Python中exit、return、sys.exit()等使用实例和区别
May 28 #Python
Python中的with...as用法介绍
May 28 #Python
python关键字and和or用法实例
May 28 #Python
Python yield 使用浅析
May 28 #Python
Python中super的用法实例
May 28 #Python
You might like
我的论坛源代码(二)
2006/10/09 PHP
php 获取完整url地址
2008/12/20 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
新闻内页-JS分页
2006/06/07 Javascript
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
国家励志奖学金个人先进事迹材料
2014/05/04 职场文书
经济管理专业求职信
2014/06/09 职场文书
作风大整顿心得体会
2014/09/10 职场文书
户籍证明格式
2014/09/15 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
2016新年致辞
2015/08/01 职场文书
2015年圣诞节寄语
2015/08/17 职场文书