我在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')
答案 0 :(得分:0)
我使用group_concat
解决了这个问题。结果以逗号分隔的字符串形式返回,但没关系。
Task.statuses = column_property(
select([func.group_concat(distinct(Chunk.status))]).\
where(Chunk.taskId == Task.id).\
correlate(Task.__table__)
)