sqlalchemy对象转dict的示例


Posted in Python onApril 22, 2014
def sa_obj_to_dict(obj, filtrate=None, rename=None):
    """
    sqlalchemy 对象转为dict
    :param filtrate: 过滤的字段
    :type filtrate: list or tuple
    :param rename: 需要改名的,改名在过滤之后处理, key为原来对象的属性名称,value为需要更改名称
    :type rename: dict
    :rtype: dict
    """
    if isinstance(obj.__class__, DeclarativeMeta):
        # an SQLAlchemy class
        #该类的相关类型,即直接与间接父类
        cla = obj.__class__.__mro__
        #过滤不需要的父类
        cla = filter(lambda c: hasattr(c, '__table__'), filter(lambda c: isinstance(c, DeclarativeMeta), cla))
        columns = []
        map(lambda c: columns.extend(c.__table__.columns), cla[::-1])
        # columns = obj.__table__.columns
        if filtrate and isinstance(filtrate, (list, tuple)):
            fields = dict(map(lambda c: (c.name, getattr(obj, c.name)), filter(lambda c: not c.name in filtrate, columns)))
        else:
            fields = dict(map(lambda c: (c.name, getattr(obj, c.name)), columns))
        # fields = dict([(c.name, getattr(obj, c.name)) for c in obj.__table__.columns])
        if rename and isinstance(rename, dict):
            #先移除key和value相同的项
            _rename = dict(filter(lambda (k, v): str(k) != str(v), rename.iteritems()))
            #如果原始key不存在,那么新的key对应的值默认为None
            #如果新的key已存在于原始key中,那么原始key的值将被新的key的值覆盖
            # map(lambda (k, v): fields.setdefault(v, fields.pop(k, None)), _rename.iteritems())
            map(lambda (k, v): fields.update({v: fields.pop(k, None)}), _rename.iteritems())
        #
        return fields
    else:
        return {}
Python 相关文章推荐
Python学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
详解Python pygame安装过程笔记
Jun 05 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
python中时间、日期、时间戳的转换的实现方法
Jul 06 Python
对Python3中列表乘以某一个数的示例详解
Jul 20 Python
Python random库使用方法及异常处理方案
Mar 02 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
python字符串判断密码强弱
Mar 18 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 Python
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 #Python
python实现linux服务器批量修改密码并生成execl
Apr 22 #Python
python中精确输出JSON浮点数的方法
Apr 18 #Python
python中使用OpenCV进行人脸检测的例子
Apr 18 #Python
在python的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 #Python
Python操作json数据的一个简单例子
Apr 17 #Python
python使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 #Python
You might like
PHP4和PHP5共存于一系统
2006/11/17 PHP
php上传中文文件名乱码问题处理方案
2015/02/03 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
实例讲解PHP表单处理
2019/02/15 PHP
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
javascript折半查找详解
2015/01/26 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
js实现最短的XML格式化工具实例
2015/03/12 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
python远程登录代码
2008/04/29 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
小加工厂管理制度
2014/01/21 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server