编写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语言编写电脑时间自动同步小工具
Mar 08 Python
Python常用模块用法分析
Sep 08 Python
Python使用Flask框架获取当前查询参数的方法
Mar 21 Python
Python中的高级数据结构详解
Mar 27 Python
python定时器(Timer)用法简单实例
Jun 04 Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
学python安装的软件总结
Oct 12 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
python函数调用,循环,列表复制实例
May 03 Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 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
关于php内存不够用的快速解决方法
2013/10/26 PHP
php中return的用法实例分析
2015/02/28 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
Javascript 按位与运算符 (&)使用介绍
2014/02/04 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
python开发之list操作实例分析
2016/02/22 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
python购物车程序简单代码
2018/04/18 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
django有哪些好处和优点
2020/09/01 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
应届毕业生求职信
2013/11/30 职场文书
七年级地理教学反思
2014/01/26 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
python tkinter实现定时关机
2021/04/21 Python
Matlab如何实现矩阵复制扩充
2021/06/02 Python