inheritan模型中的sqlalchemy约束

2024-04-16 18:59:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个简单的模型:

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'))

如何定义约束发送者id!=接收器id?你知道吗


Tags: instancekey模型idbackendtruemessagecolumn
1条回答
网友
1楼 · 发布于 2024-04-16 18:59:25

这似乎不适用于联接表继承,我试过了,它抱怨在ChatMessage中创建约束时,来自Message的列sender_id不存在。你知道吗

这种抱怨是有道理的,因为创建表时sender_idreceiver_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),
    )

相关问题 更多 >