繁体   English   中英

将子表中的不同值聚合为sqlalchemy中父表的属性

[英]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_propertyhybrid_propertyTask ,将返回的不同设置的状态,该任务的块。

我试图像这样使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM