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标准库与第三方库详解
Jul 22 Python
Python素数检测实例分析
Jun 15 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
Python判断两个对象相等的原理
Dec 12 Python
Python简单生成随机数的方法示例
Mar 31 Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 Python
python实现文件的备份流程详解
Jun 18 Python
哪些是python中web开发框架
Jun 17 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
python爬虫--selenium模块
Mar 31 Python
Python字符串常规操作小结
Apr 03 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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的bbs设计(四)
2006/10/09 PHP
PHP编程函数安全篇
2013/01/08 PHP
php显示时间常用方法小结
2015/06/05 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
js 对象是否存在判断
2009/07/15 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
Python GAE、Django导出Excel的方法
2008/11/24 Python
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
python中for in的用法详解
2020/04/17 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
我是一名护士演讲稿
2014/08/28 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
Django实现翻页的示例代码
2021/05/24 Python