我正在开发一个应用程序,其中我的数据库对象通常有多个父级和多个子级,并且希望创建一个 SQLAlchemy 查询来返回对象的所有后代。
意识到我基本上是在尝试将图形存储在 SQL 数据库中,我发现设置自引用多对多模式可以让我大部分完成任务,但我在编写查询以返回所有后代时遇到了问题一个节点的。我尝试遵循SQLA 的递归 CTE 示例,这看起来是正确的方法,但在使其工作时遇到了问题。我认为我的情况与示例不同,因为在我的情况下,对Node.child(and Node.parent) 的查询返回检测列表而不是 ORM 对象。
无论如何,下面的代码将建立一个简单的有向非循环断开图,如下所示(其中方向被推断为从较高的行到较低的行):
a b c
\ / \ |
d e f
|\ /
g h
|
i
Run Code Online (Sandbox Code Playgroud)
我正在寻找一些帮助编写一个查询,该查询将为我提供节点的所有后代。
get_descendants(d)应该返回 g、h、i
get_descendants(b)应该返回 d、e、g、h、i
示例代码:
a b c
\ / \ |
d e f
|\ /
g h
|
i
Run Code Online (Sandbox Code Playgroud)