使用 sqlalchemy_mptt 做树结构数据的管理
文件格式的数据要求做数据的存储, 调研发现了 mptt 的这种树结构, 可以使用二叉树的左右节点作为排序的基础, 从而达到数据插入查询的树结构
只是最后发现, 这种方式查询方便, 但是维护树的开销太大, 导致每次数据更新都会耗时很久, 最后文件存储还是使用传统的方式: parent_id
参考文档
sqlalchemy_mptt 官网:
https://sqlalchemy-mptt.readthedocs.io/crud.html
sqlalchemy_mptt 使用:
https://blog.csdn.net/yilovexing/article/details/118759950
树结构的存储方案:
https://www.jianshu.com/p/2ac9eb3b6185
https://juejin.cn/post/6844903873581170701#heading-6
使用sqlalchemy构建树结构的用户评论
https://juejin.cn/post/6979897604100325406
一种树方案的使用:
https://jeesite.com/docs/tree-table-use/#%E6%98%BE%E7%A4%BA%E5%BD%93%E5%89%8D%E8%8A%82%E7%82%B9%E7%9A%84%E5%85%A8%E5%90%8D%E7%A7%B0
部分操作
查询某一节点的树路径
node = (
db.session.query(Tree)
.filter(
Tree.id == depot_id,
Tree.type == "类型"
)
.first()
)
# 重点是 query 与 json_fields(返回指定的json字段)
res = node.get_tree(
session=db.session,
json=True,
json_fields=lambda tree_node: {"name":tree_node.name, "type":tree_node.type, "parent_id": tree_node.parent_id},
query=lambda nodes: nodes.filter(TRee.tree_id == node.tree_id)
)