栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将SqlAlchemy ORM结果转换为dict

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将SqlAlchemy ORM结果转换为dict

您可以使用映射器的Relationships属性。代码选择取决于您要如何映射数据以及关系的外观。如果您有很多递归关系,则可能要使用max_depth计数器。我下面的示例使用一组关系来防止递归循环。如果您只打算深入一遍,则可以完全消除递归,但是您确实说了“依此类推”。

def object_to_dict(obj, found=None):    if found is None:        found = set()    mapper = class_mapper(obj.__class__)    columns = [column.key for column in mapper.columns]    get_key_value = lambda c: (c, getattr(obj, c).isoformat()) if isinstance(getattr(obj, c), datetime) else (c, getattr(obj, c))    out = dict(map(get_key_value, columns))    for name, relation in mapper.relationships.items():        if relation not in found: found.add(relation) related_obj = getattr(obj, name) if related_obj is not None:     if relation.uselist:         out[name] = [object_to_dict(child, found) for child in related_obj]     else:         out[name] = object_to_dict(related_obj, found)    return out

另外,请注意,还有一些性能问题需要考虑。您可能需要使用诸如joinedload或subqueryload之类的选项,以防止执行过多的SQL查询。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号