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根据经纬度计算距离示例
Feb 16 Python
Python中的MongoDB基本操作:连接、查询实例
Feb 13 Python
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
Python之str操作方法(详解)
Jun 19 Python
python opencv之SIFT算法示例
Feb 24 Python
pandas 两列时间相减换算为秒的方法
Apr 20 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
Python3数字求和的实例
Feb 19 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
Pytorch数据拼接与拆分操作实现图解
Apr 30 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
Python+OpenCV检测灯光亮点的实现方法
Nov 02 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
PHP输入流php://input介绍
2012/09/18 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
彻底搞懂Python字符编码
2018/01/23 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
把pandas转换int型为str型的方法
2019/01/29 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
关于Django Models CharField 参数说明
2020/03/31 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
世界汽车零件:World Car Parts
2019/09/04 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
表扬信范文
2015/05/04 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python