[英]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.