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 字符串操作方法大全
Mar 11 Python
17个Python小技巧分享
Jan 23 Python
python操作mysql数据库
Mar 05 Python
Python中matplotlib中文乱码解决办法
May 12 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
浅谈python之高阶函数和匿名函数
Mar 21 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
Aug 23 Python
python连接PostgreSQL数据库的过程详解
Sep 18 Python
python颜色随机生成器的实例代码
Jan 10 Python
opencv中图像叠加/图像融合/按位操作的实现
Apr 01 Python
Python使用pandas导入xlsx格式的excel文件内容操作代码
Dec 24 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
CI框架中cookie的操作方法分析
2014/12/12 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
validator验证控件使用代码
2010/11/23 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
js倒计时抢购实例
2015/12/20 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
js实现文字截断功能
2016/09/14 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
python 显示数组全部元素的方法
2018/04/19 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
pandas DataFrame运算的实现
2020/06/14 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
设计师珠宝:Ylang 23
2018/05/11 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
综合办公室主任职责
2013/12/16 职场文书
我的理想演讲稿
2014/04/30 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
实习单位意见
2015/06/04 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
60句有关成长的名言
2019/09/04 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python