【发布时间】:2016-02-27 15:35:39
【问题描述】:
如果我有一个如下所示的 SQLAlchemy 声明性模型:
class Test(Model):
__tablename__ = 'tests'
id = Column(Integer, Sequence('test_id_seq'), primary_key=True)
...
Atest_id = Column(Integer, ForeignKey('Atests.id'), nullable=True)
Btest_id = Column(Integer, ForeignKey('Btests.id'), nullable=True)
Ctest_id = Column(Integer, ForeignKey('Ctests.id'), nullable=True)
Dtest_id = Column(Integer, ForeignKey('Dtests.id'), nullable=True)
Etest_id = Column(Integer, ForeignKey('Etests.id'), nullable=True)
...
date = Column(DateTime)
status = Column(String(20)) # pass, fail, needs_review
而且我想确保在给定行中只有一个 *test_id 外键存在,我如何在 SQLAlchemy 中实现这一点?
我看到有SQLAlchemyCheckConstraint对象(see docs),但是MySQL不支持检查约束。
数据模型在SQLAlchemy 之外有交互,所以最好是数据库级检查 (MySQL)
【问题讨论】:
-
请注意,某些数据库不主动支持检查约束,例如 MySQL。
-
@7stud 更新了问题以反映这一点。
-
@7stud 第二个链接看起来很适用,尽管我想知道是否有一种方法可以构建该逻辑来优雅地处理
n列以进行检查。
标签: python mysql sqlalchemy