我有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并强制执行此唯一约束的其他应用中具有完全相同的代码。