我创建了这个递归查询:
element0 = aliased(Territoire)
sub_territories = session.query(element0, element0.id). \
filter(element0.id == 1). \
filter(element0.scale != 'Region'). \
cte(name='sub_territories', recursive=True)
st_alias = aliased(sub_territories)
relation = aliased(parent_child)
porteur = aliased(Territoire)
corps = session.query(porteur, relation.c.child_id). \
join(porteur, porteur.id == relation.c.child_id). \
join(st_alias, relation.c.parent_id == st_alias.c.id). \
filter(st_alias.c.scale != 'Region')
sub_territories = sub_territories.union(corps)
它应该递归地给出元素0的所有子元素,停在“地区”级别(项目通过多对多关系链接),每个项目都有一个级别,可以是:世界、国家、地区、城市。。。你知道吗
下面是一些可以帮助您的代码:
class Territoire(Base):
__tablename__ = 'territoire'
id = Column(Integer, primary_key=True)
name = Column(String)
scale = Column(String)
children = relationship(
'Territoire',
secondary=parent_child,
back_populates='parents',
primaryjoin=parent_child.c.parent_id == id,
secondaryjoin=parent_child.c.child_id == id,
)
parents = relationship(
'Territoire',
secondary=parent_child,
primaryjoin=parent_child.c.child_id==id,
secondaryjoin=parent_child.c.parent_id==id,
back_populates='children'
)
还有桌子:
parent_child = Table('parent_child', Base.metadata,
Column('parent_id', ForeignKey('territoire.id'), primary_key=True),
Column('child_id', ForeignKey('territoire.id'), primary_key=True))
错误消息是:
sqlalchemy.exc.ArgumentError: All selectables passed to CompoundSelect must have identical numbers of columns; select #1 has 3 columns, select #2 has 4
我不理解这个错误,因为2个CTE请求的第一个元素是Territoire对象,第二个元素是int(id)。你知道吗
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐