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多线程编程简单介绍
Apr 13 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
Python3 伪装浏览器的方法示例
Nov 23 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
python中的global关键字的使用方法
Aug 20 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
Python利用for循环打印星号三角形的案例
Apr 12 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 Python
Python hashlib模块的使用示例
Oct 09 Python
PyQt QMainWindow的使用示例
Mar 24 Python
Pygame游戏开发之太空射击实战敌人精灵篇
Aug 05 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
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
PHP引用(&)各种使用方法实例详解
2014/03/20 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
Python中itertools模块用法详解
2014/09/25 Python
python daemon守护进程实现
2016/08/27 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
解决Django连接db遇到的问题
2019/08/29 Python
深入了解Python在HDA中的应用
2019/09/05 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
2020/11/17 Python
Django url 路由匹配过程详解
2021/01/22 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
小学生获奖感言范文
2014/02/02 职场文书
酒店节能降耗方案
2014/05/08 职场文书
党建目标管理责任书
2014/07/25 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers