强制执行唯一约束SQLALchemy关系

时间:2020-08-17 21:37:45

标签: python sqlite sqlalchemy

我有2个模型/表格,一个是项目,另一个是级别。一个项目可以有多个级别,但是每个级别只能属于一个项目。一个关卡必须有一个底楼(int),该底楼对于每个项目都必须是唯一的。换句话说,(project.project_id,level.floor)必须是唯一的。如何使用SQLAlchemy强制执行此类约束?

我从2个模型中删除了所有不必要的字段:

class Project(Base):
    __tablename__ = "project"
    project_id = Column(Integer, primary_key=True)

class Level(Base):
    __tablename__ = "level"
    level_id = Column(Integer, primary_key=True)
    floor = Column(Integer)
    project_id = Column(Integer, ForeignKey("project.project_id"))
    project = relationship(
        "Project",
        backref="levels",  #! might see an error here (project does not exist)
        cascade="all, delete",
    )
    UniqueConstraint("project_id", "floor", name="project_level_floor")

更新:

这似乎是一个SQLite问题,因为我在使用Postgres并强制执行此唯一约束的其他应用中具有完全相同的代码。

0 个答案:

没有答案
相关问题