簡體   English   中英

使用sqlalchemy在組合鍵上的自引用關系

[英]Self-referential relations on composite keys using sqlalchemy

我有一個帶有回復其他消息的消息的模型。 同一message_id可以在多個帳戶中。 我找不到一種方法來使account和message_id成為復合鍵並在關聯中使用它。

我到現在為止:

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)

在這種情況下,如何建立關系以適當地將帳戶作為組合密鑰的一部分來處理。

最后,它就像執行以下操作一樣簡單:

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

關鍵在於將remote_side與復合鍵一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM