2016-05-31 8 views
0

で親テーブルの属性として、私はSQLAlchemyの中で次のように設定する1対多の関係があります。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) 

TasksChunksのリストが含まれています。各チャンクは独自のstatusを持っています。

column_propertyまたはhybrid_propertyTaskを追加して、そのタスクのチャンクのステータスセットを戻したいとします。

私はこのようなcolumn_propertyを使用することを試みた:

Task.statuses = column_property(
    select([func.distinct(Chunk.status)]).\ 
    where(Chunk.taskId == Task.id).\ 
    correlate(Task.__table__) 
) 

しかし、これは選択帰国複数の値についてのエラーを与える:

sqlalchemy.exc.OperationalError: (OperationalError) (1242, 'Subquery returns more than 1 row') 

答えて

0

私はgroup_concatを使用してこれを解決しました。結果はコンマで区切られた文字列として返されますが、それは問題ありません。

Task.statuses = column_property(
    select([func.group_concat(distinct(Chunk.status))]).\ 
    where(Chunk.taskId == Task.id).\ 
    correlate(Task.__table__) 
)