[英]Aggregating distinct values from a child table as an attribute on a parent table in sqlalchemy
我在sqlalchemy中建立了一对多关系:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey
Base = declarative_base()
class Status(Base):
__tablename__ = 'status'
name = Column(String(32), primary_key=True, unique=True)
class Chunk(Base):
__tablename__ = 'chunk'
id = Column(Integer, primary_key=True)
taskId = Column(Integer, ForeignKey('task.id'))
status = Column(String(32), ForeignKey('status.name'), default='unassigned')
class Task(Base):
__tablename__ = 'task'
id = Column(Integer, primary_key=True)
Tasks
包含“ Chunks
列表。 每个块都有其自己的status
。
我想补充一个column_property
或hybrid_property
到Task
,将返回的不同设置的状态,该任务的块。
我试图像这样使用column_property
:
Task.statuses = column_property(
select([func.distinct(Chunk.status)]).\
where(Chunk.taskId == Task.id).\
correlate(Task.__table__)
)
但这会导致有关select返回多个值的错误:
sqlalchemy.exc.OperationalError: (OperationalError) (1242, 'Subquery returns more than 1 row')
我通过使用group_concat
解决了这个问题。 结果以逗号分隔的字符串形式返回,但这没关系。
Task.statuses = column_property(
select([func.group_concat(distinct(Chunk.status))]).\
where(Chunk.taskId == Task.id).\
correlate(Task.__table__)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.