python – sqlalchemy,使用检查约束

我刚开始使用sqlalchemy,我想在我的一个列上设置检查约束.我有一个名为startTime和endTime的列,我想确保endTime>开始时间.

from sqlalchemy import Column, Integer, String, ForeignKey, Date
import models.Base

class Session(Base):
    __tablename__ = 'sessions'

    sid = Column(Integer, primary_key=True)
    uid = Column(Integer, ForeignKey('users.uid'), nullable=False)
    startTime= Column(Date, nullable=False)

    #probably won't work
    endTime = Column(Date, CheckConstraint('endTime > startTime'), nullable=False)
最佳答案
它是一个有效的语法,但在MySQL中(我假设您使用的是MySQL?),这将被忽略.来自sqla docs:

>检查约束可以命名或未命名,可以使用CheckConstraint构造在Column或Table级别创建.检查约束的文本直接传递到数据库,因此存在有限的“数据库独立”行为.列级检查约束通常应仅引用它们所在的列,而表级约束可引用表中的任何列.请注意,某些数据库不主动支持MySQL等检查约束.

您当然可以创建一个触发器,但是然后您将业务逻辑放到DB层.我会写一个app级构造函数检查.

转载注明原文:python – sqlalchemy,使用检查约束 - 代码日志