SQLAlchemy 递归 CTE 查询没有 return 非列成员?
SQLAlchemy recursive CTE query doesn't return non-column members?
我有以下 class:
class Catalog(Base):
__tablename__ = 'catalog'
id = Column(String, primary_key=True)
parentid = Column(String, ForeignKey('catalog.id'))
name = Column(String)
parent = relationship("Catalog", remote_side=[id])]
@property
def operative_name_stamp(self):
node = self
while not node.name and node.parent:
node = node.parent
return node.name
如果我做一些基于 CTE 的递归查询:
hierarchy = session.query(
Catalog, literal(0).label('level'))\
.filter(Catalog.parentid == null())\
.cte(name="hierarchy", recursive=True)
parent = aliased(hierarchy, name="p")
children = aliased(Catalog, name="c")
hierarchy = hierarchy.union_all(
session.query(
children,
(parent.c.level + 1).label("level"))
.filter(children.parentid == parent.c.id))
result = session.query(Catalog, hierarchy.c.level)\
.select_entity_from(hierarchy).all()
这只会给我一个包含列成员的元组层次结构,但缺少非列成员 --operative_name_stamp
--。
有没有办法在结果中包含这些成员?
这个问题可以通过使用字典而不是列表作为返回结果轻松解决。这样你就可以通过主键从字面上 "look up" 任何你喜欢的东西。这让我想起了看似复杂的生活!
我有以下 class:
class Catalog(Base):
__tablename__ = 'catalog'
id = Column(String, primary_key=True)
parentid = Column(String, ForeignKey('catalog.id'))
name = Column(String)
parent = relationship("Catalog", remote_side=[id])]
@property
def operative_name_stamp(self):
node = self
while not node.name and node.parent:
node = node.parent
return node.name
如果我做一些基于 CTE 的递归查询:
hierarchy = session.query(
Catalog, literal(0).label('level'))\
.filter(Catalog.parentid == null())\
.cte(name="hierarchy", recursive=True)
parent = aliased(hierarchy, name="p")
children = aliased(Catalog, name="c")
hierarchy = hierarchy.union_all(
session.query(
children,
(parent.c.level + 1).label("level"))
.filter(children.parentid == parent.c.id))
result = session.query(Catalog, hierarchy.c.level)\
.select_entity_from(hierarchy).all()
这只会给我一个包含列成员的元组层次结构,但缺少非列成员 --operative_name_stamp
--。
有没有办法在结果中包含这些成员?
这个问题可以通过使用字典而不是列表作为返回结果轻松解决。这样你就可以通过主键从字面上 "look up" 任何你喜欢的东西。这让我想起了看似复杂的生活!