我有两个简单的模型:
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?
答案 0 :(得分:1)
这似乎不适用于已连接的表继承,我已经尝试过并且在sender_id
中创建约束时抱怨Message
中的列ChatMessage
不存在
这种抱怨是有道理的,因为sender_id
在创建表时不会与receiver_id
在同一个表中,因此需要遵循外键关系来检查约束。 / p>
一种选择是将ChatMessage
作为一个表格。
使用放置在表格中的CheckConstraint
。
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),
)