将SqlAlchemy ORM结果转换为dict

将SqlAlchemy ORM结果转换为dict,第1张

将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查询。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5663802.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存