小编kle*_*euf的帖子

如何编写一个 SQLAlchemy 查询来返回图中节点的所有后代?

我正在开发一个应用程序,其中我的数据库对象通常有多个父级和多个子级,并且希望创建一个 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)

python orm many-to-many sqlalchemy graph

2
推荐指数
1
解决办法
1726
查看次数

标签 统计

graph ×1

many-to-many ×1

orm ×1

python ×1

sqlalchemy ×1