0

我有两个简单的模型:

class Message(Backend.instance().get_base()):
    __tablename__ = 'messages'
    id = Column(Integer, primary_key=True, autoincrement=True)
    sender_id = Column(Integer, ForeignKey('users.id')) 
    content = Column(String, nullable=False)


class ChatMessage(Message):
    __tablename__ = 'chat_messages'
    id = Column(Integer, ForeignKey('messages.id'), primary_key=True)
    receiver_id = Column(Integer, ForeignKey('users.id'))

如何定义约束 sender_id!=receiver_id?

4

1 回答 1

1

这似乎不适用于连接表继承,我已经尝试过,它sender_id抱怨MessageChatMessage.

这种抱怨是有道理的,因为与创建sender_id表时不在同一个表receiver_id中,因此需要遵循外键关系来检查约束。

一种选择是制作ChatMessage一张桌子。

使用CheckConstraint, 放在表 args 中。

class ChatMessage(Base):
    __tablename__ = 'chat_messages'
    id = sa.Column(sa.Integer, primary_key=True)
    sender_id = sa.Column(sa.Integer, sa.ForeignKey(User.id))
    receiver_id = sa.Column(sa.Integer, sa.ForeignKey(User.id))
    content = sa.Column(sa.String, nullable=False)

    __table_args__ = (
        sa.CheckConstraint(receiver_id != sender_id),
    )
于 2013-10-12T15:02:28.943 回答