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 相关文章推荐
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
Django的URLconf中使用缺省视图参数的方法
Jul 18 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
May 25 Python
使用Python从有道词典网页获取单词翻译
Jul 03 Python
Python中异常重试的解决方案详解
May 05 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
python切片及sys.argv[]用法详解
May 25 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
Python实现12306火车票抢票系统
Jul 04 Python
让你的Python代码实现类型提示功能
Nov 19 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 Python
一文搞懂python异常处理、模块与包
Jun 26 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
德生H-501的评价与改造
2021/03/02 无线电
php使用curl访问https示例分享
2014/01/17 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
PHP实现简单登录界面
2019/10/23 PHP
脚本收藏iframe
2006/07/21 Javascript
js静态作用域的功能。
2006/12/25 Javascript
Prototype使用指南之range.js
2007/01/10 Javascript
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
python实现定时同步本机与北京时间的方法
2015/03/24 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
了解不常见但是实用的Python技巧
2019/05/23 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
python conda操作方法
2019/09/11 Python
Python修改DBF文件指定列
2020/12/19 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
大学生求职自荐信范文
2015/03/04 职场文书
初中历史教学反思
2016/02/19 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书