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爬虫之神器正则表达式
Nov 06 Python
简单的编程0基础下Python入门指引
Apr 01 Python
python自带的http模块详解
Nov 06 Python
Python探索之Metaclass初步了解
Oct 28 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
python 怎样进行内存管理
Nov 10 Python
python基于selenium爬取斗鱼弹幕
Feb 20 Python
pycharm debug 断点调试心得分享
Apr 16 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
Mysql的常用命令
2006/10/09 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
javascript验证身份证号
2015/03/03 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
python with (as)语句实例详解
2020/02/04 Python
python wsgiref源码解析
2021/02/06 Python
Saucony澳大利亚官网:美国跑鞋品牌,运动鞋中的劳斯莱斯
2018/05/05 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
大学同学十年聚会感言
2014/02/21 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python