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 11 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
如何用itertools解决无序排列组合的问题
May 18 Python
python的多重继承的理解
Aug 06 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
详解Django之auth模块(用户认证)
Apr 17 Python
Python绘制的二项分布概率图示例
Aug 22 Python
Python 面试中 8 个必考问题
Nov 16 Python
Python解析、提取url关键字的实例详解
Dec 17 Python
python数据预处理 :数据抽样解析
Feb 24 Python
Python如何实现线程间通信
Jul 30 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
jquery 简单的进度条实现代码
2010/03/11 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
对numpy中array和asarray的区别详解
2018/04/17 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
基于python调用psutil模块过程解析
2019/12/20 Python
python def 定义函数,调用函数方式
2020/06/02 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
小学生母亲节演讲稿
2014/05/07 职场文书
预防传染病方案
2014/06/14 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
暂停营业通知
2015/04/25 职场文书
电影雨中的树观后感
2015/06/15 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
Java 死锁解决方案
2022/05/11 Java/Android