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网络编程之数据传输UDP实例分析
May 20 Python
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
django数据库migrate失败的解决方法解析
Feb 08 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
python实现音乐下载的统计
Jun 20 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
python kafka 多线程消费者&手动提交实例
Dec 21 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
python实现批量命名照片
Jun 18 Python
详解pandas赋值失败问题解决
Nov 29 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
jQuery版Tab标签切换
2011/03/16 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
详解Python中的正则表达式
2018/07/08 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
2014年自我评价
2014/01/04 职场文书
工作表现自我评价
2014/02/08 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
公司离职证明标准格式
2014/11/18 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
Python爬虫基础初探selenium
2021/05/31 Python
分享几个实用的CSS代码块
2022/06/10 HTML / CSS
Python+pyaudio实现音频控制示例详解
2022/07/23 Python