sqlalchemy mptt混合(嵌套集)
sqlalchemy_mptt的Python项目详细描述
用于使用 sqlalchemy模型和使用模型实例的树,如 Django MPTT公司。文档http://sqlalchemy-mptt.readthedocs.io/
嵌套集模型是表示嵌套的 关系数据库中的集合(也称为树或层次结构)。
安装
从github安装:
pip install git+http://github.com/uralbash/sqlalchemy_mptt.git
PYPI:
pip install sqlalchemy_mptt
来源:
pip install -e .
用法
添加MIXIN到
模型fromsqlalchemyimportColumn,Integer,Booleanfromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy_mptt.mixinsimportBaseNestedSetsBase=declarative_base()classTree(Base,BaseNestedSets):__tablename__="tree"id=Column(Integer,primary_key=True)visible=Column(Boolean)def__repr__(self):return"<Node (%s)>"%self.id
现在你可以添加,移动和删除对象!
插入节点
node=Tree(parent_id=6)session.add(node)
level Nested sets example 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 level Insert node with parent_id == 6 1 1(1)24 _______________|_________________ | | | 2 2(2)5 6(4)13 14(7)23 | ____|____ ___|____ | | | | | 3 3(3)4 7(5)8 9(6)12 15(8)18 19(10)22 | | | 4 10(23)11 16(9)17 20(11)21
删除节点
node=session.query(Tree).filter(Tree.id==4).one()session.delete(node)
level Nested sets example 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 level Delete node == 4 1 1(1)16 _______________|_____ | | 2 2(2)5 6(7)15 | ^ 3 3(3)4 7(8)10 11(10)14 | | 4 8(9)9 12(11)13
更新节点
node=session.query(Tree).filter(Tree.id==8).one()node.parent_id=5session.add(node)
level Nested sets example 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 level Move 8 - > 5 1 1(1)22 _______________|__________________ | | | 2 2(2)5 6(4)15 16(7)21 | ^ | 3 3(3)4 7(5)12 13(6)14 17(10)20 | | 4 8(8)11 18(11)19 | 5 9(9)10
移动节点(支持多树)
嵌套集合多树
向内移动
node=session.query(Tree).filter(Tree.id==4).one()node.move_inside("15")
4 -> 15 level Nested sets tree1 1 1(1)16 _______________|_____________________ | | 2 2(2)5 6(7)15 | ^ 3 3(3)4 7(8)10 11(10)14 | | 4 8(9)9 12(11)13 level Nested sets tree2 1 1(12)28 ________________|_______________________ | | | 2 2(13)5 6(15)17 18(18)27 | ^ ^ 3 3(14)4 7(4)12 13(16)14 15(17)16 19(19)22 23(21)26 ^ | | 4 8(5)9 10(6)11 20(20)21 24(22)25
在之后移动
node=session.query(Tree).filter(Tree.id==8).one()node.move_after("5")
level Nested sets example 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 level Move 8 after 5 1 1(1)22 _______________|__________________ | | | 2 2(2)5 6(4)15 16(7)21 | ^ | 3 3(3)4 7(5)8 9(8)12 13(6)14 17(10)20 | | 4 10(9)11 18(11)19
移到顶层
node=session.query(Tree).filter(Tree.id==15).one()node.move_after("1")
level tree_id = 1 1 1(1)22 _______________|___________________ | | | 2 2(2)5 6(4)11 12(7)21 | ^ ^ 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20 | | 4 14(9)15 18(11)19 level tree_id = 2 1 1(15)6 ^ 2 2(16)3 4(17)5 level tree_id = 3 1 1(12)16 _______________| | | 2 2(13)5 6(18)15 | ^ 3 3(14)4 7(19)10 11(21)14 | | 4 8(20)9 12(22)13
支持和发展
要报告错误,请使用issue tracker。
我们欢迎任何贡献:建议、想法、新的承诺 未来、错误修复、重构、文档、测试、翻译等。
如果您有任何疑问,请联系我sacrud@uralbash.ru或萨克鲁德IRC 频道
许可证
这个项目是根据麻省理工学院的许可证授权的。
0.2.5(2019-07-23)
见第64期
- 添加了类似的django_mptt方法get_sidings和get_children
0.2.4(2018-12-14)
参见pr 61
- 允许指定路径到根的顺序
0.2.3(2018-06-03)
见第57期
- 修复重建树
- 添加了从0开始的支持节点标识符
0.2.2(2017-10-05)
见第56期
- 添加了自定义默认根级别。支持django style level=0
0.2.1(2016-01-23)
见PR 51
- 修复索引列名称
0.2.0(2015-11-13)
见PR 50
- 更改了parent_id以动态匹配主键的类型
- 公开了作为实例和 类级方法