当前位置: 首页 > 面试题库 >

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

皇甫乐
2023-03-14
问题内容

在此表模式中:

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)

我有一个父母,假设这张桌子:

> 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    |
+--------------------------------------+--------------------------------------+---------+-----------+---------+

父母是名为“ singapore”*国家 对象。可以有多个嵌套的对象,是孩子们 盛港 随便怎么样都 盛港 是孩子
新加坡
***

因此,一条等级链可能看起来像a-> b->盛港->新加坡

->意思

如何获得所有以父级为新加坡的位置对象,包括父级对象(新加坡)?(请在SQLAlchemy中)。谢谢!


问题答案:

SA文档:Query.cte

我不得不说,新的CTE的东西(因为0.76)是相当不错的,比老办法,我必须返工更好这个。

无论如何,以为您正在寻找这样的东西…

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()


 类似资料:
  • 本文向大家介绍SQL Server 公用表表达式(CTE)实现递归的方法,包括了SQL Server 公用表表达式(CTE)实现递归的方法的使用技巧和注意事项,需要的朋友参考一下 公用表表达式简介: 公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。CTE 与派生表类似,具体表现在不存储

  • 问题内容: 我的数据库看起来像(pligg cms,样本数据) 假设,如何获取芝加哥的顶级parentID,它应该是位置。 我是否在php中编写了递归函数,或者在mysql中可行? 问题答案: 该网站非常好地概述了在mysql和PHP中存储分层数据的不同方法。要回答您的问题,最简单的方法是使用php和递归。您可以使用其他方法,例如,不需要多个数据库查询。但是,在处理大量插入和更新时,此方法的实现可

  • 问题内容: 示例字符串: 我想先进行匹配,然后将其替换为一些文本,以使字符串变为,然后进行匹配。 问题答案: 令人讨厌的是,Javascript没有提供PCRE递归参数,因此要处理嵌套问题远非易事。但是可以做到的。

  • 问题内容: CREATE TABLE foo ( name text NOT NULL, deleted_at timestamp without time zone ); 当我尝试使用ORM执行此操作时,我最终遇到此错误 我想使用ORM,以便在更新命令完成之前使用更改来更新会话。 问题答案: 使用ORM发行多表更新的方法如下: Query API 文档中的脚注,用于指向Core多表更新文档的更新

  • 我只是想递归地定义一个Java8lambda表达式。 我发现使其工作的一种方法是使用一个数组来引用lambda,有效地欺骗了java编译器: 定义递归lambda表达式还有其他技巧吗?

  • 问题内容: 该字符串可以类似于以下之一: 我想匹配不限数量的“ a(x,y)”。如何使用Regex做到这一点?这是我所拥有的: 它仅匹配“ a(x,y)”的两个递归。 问题答案: Java的标准正则表达式库不支持递归,因此您无法将此类通用嵌套结构与之匹配。 但是在确实支持递归的版本(Perl,PCRE,.NET等)中,您可以使用以下表达式: