gpt4 book ai didi

python - 如何在 SQLAlchemy 中执行此递归公用表表达式?

转载 作者:行者123 更新时间:2023-12-05 00:33:31 24 4
gpt4 key购买 nike

在此表架构中:

class Location(db.Model):
id = db.Column(db.String(255), primary_key=True)
parent_id = db.Column(db.String(255), db.ForeignKey('location.id'), nullable=True)
type = db.Column(db.String(255))
name = db.Column(db.String(255))
options = db.Column(db.Text, nullable=True)

我有一个 parent ,假设这个表:
> select * from location;
+--------------------------------------+--------------------------------------+---------+-----------+---------+
| id | parent_id | type | name | options |
+--------------------------------------+--------------------------------------+---------+-----------+---------+
| 8821da60-e7d2-11e1-951e-ae16bc2b7368 | 88227a60-e7d2-11e1-951e-ae16bc2b7368 | city | sengkang | NULL |
| 88227a60-e7d2-11e1-951e-ae16bc2b7368 | NULL | country | singapore | NULL |
+--------------------------------------+--------------------------------------+---------+-----------+---------+

父对象是 国家对象命名 新加坡 .可以有更多的嵌套对象,它们是 的子对象。盛康就像如何 盛康 的 child 新加坡 .

所以一个单一的层次链可能看起来像 a -> b -> sengkang -> singapore

其中 -> 表示是

如何获取父对象为新加坡的所有 Location 对象,包括父对象(新加坡)? (请在 SQLAlchemy 中)。谢谢!

最佳答案

SA 文档:Query.cte

我不得不说新的 CTE 东西(从 0.76 开始)非常好,比我不得不返工的旧方法要好 this .

无论如何,认为你正在寻找这样的东西......

included_parts = session.query(Location).\
filter(Location.name=='singapore').\
cte(name='included_parts', recursive=True)

incl_alias = aliased(included_parts, name="pr")
parts_alias = aliased(Location, name='p')
included_parts = included_parts.union_all(
session.query(parts_alias).filter(parts_alias.parent_id==incl_alias.c.id)
)

q = session.query(included_parts).all()

关于python - 如何在 SQLAlchemy 中执行此递归公用表表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com