sqlalchemy mptt混合(嵌套集)

sqlalchemy_mptt的Python项目详细描述


Build StatusCoverage Status

用于使用 sqlalchemy模型和使用模型实例的树,如 Django MPTT公司。文档http://sqlalchemy-mptt.readthedocs.io/

Nested sets traversal

嵌套集模型是表示嵌套的 关系数据库中的集合(也称为树或层次结构)。

安装

从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

移动节点(支持多树)

Nested sets multitree

嵌套集合多树

向内移动

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 频道IRC Freenode

许可证

这个项目是根据麻省理工学院的许可证授权的。

0.2.5(2019-07-23)

见第64期

  • 添加了类似的django_mptt方法get_sidingsget_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以动态匹配主键的类型
  • 公开了作为实例和 类级方法

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android如何将GetText从onprexecute传递到onBackground   神谕jdbc。驾驶员OraclePreparedStatementWrapper。executeUpdate(OraclePreparedStatementWrapper.java:1350)。更新时出现异常   java spring:通过集成身份验证为sql server配置属性   java是根据特定输入动态生成字符串的代码   java如何在安卓中使用MVP层之间的注入?   Java数学库计算日志   java为什么XSD模式和WSDL模式之间存在差异?   servlet上传java图像导致类未找到异常   java无法通过代理连接到websocket   因子输出中的整数数?简单java程序   java如何查找回滚异常的原因?   angularjs节点服务器拦截从angular(http)到java spring后端的所有请求   java无法将null Jackson节点反序列化到集合   java如何使用GroupLayout进行缩进?   java将不存在的日期插入内存数据库   java如何从DynamoDB中的非键属性中搜索一个项?   java如何在jBOSS AS 7上部署工作流引擎   java Tic Tac Toe与GUI   通用抽象类的java自定义反序列化   java如何根据href链接动态更改Thymeleaf片段