2017-09-08 48 views
0

他のメッセージへの返信メッセージを含むモデルがあります。同じmessage_idを複数のアカウントに含めることができます。私はaccountとmessage_idを複合キーにして関連させる方法を見つけることができません。sqlalchemyを使用した複合キーの自己参照関係

私はこれまでのところ得ている:

class Message(Base): 
    __tablename__ = 'messages' 
    id = Column(String(20), primary_key=True) 
    account = Column(String(20)) 
    message_id = Column(String(20)) 
    in_reply_to_message_id = Column(String(20)) 
    __table_args__ = (ForeignKeyConstraint([account, in_reply_to_message_id], 
              ['messages.account', 'messages.message_id']), 
         {}) 

    parent_message = db.relationship('Message', remote_side=[message_id], 
      primaryjoin=('Message.account==Message.account and Message.in_reply_to_message_id==Message.message_id'), 
      backref=backref('child_messages'), uselist=False) 

私はmessage.parent_messageをしようと、生成されたクエリは、WHERE句で不足しているアカウントの比較である -

WHERE %(param_1)s = messages.message_id 

はまた、私は警告を取得するには:

SAWarning: Multiple rows returned with uselist=False for lazily-loaded attribute 'Tweet.parent_tweet' 
    % self.parent_property) 

アカウントを正しく管理するための関係を設定するにはどうすればよいですかこの場合はコンポジットキーの一部です。

答えて

0

は最後に、以下を実行するのと同じくらい簡単だった -

parent_message = db.relationship("Message", 
        backref="child_messages", 
        remote_side=[account, message_id] 
      ) 

キーが複合キーでremote_sideを使用していました。

関連する問題