Python 具有foreignkey属性的sqlalchemy唯一约束

Python 具有foreignkey属性的sqlalchemy唯一约束,python,flask,sqlalchemy,flask-sqlalchemy,unique-constraint,Python,Flask,Sqlalchemy,Flask Sqlalchemy,Unique Constraint,我有一个应用程序,我正在建设的烧瓶,其中包含项目和板块的模型,其中板块的项目作为外键 每个项目有一年,以整数形式给出(2017年为17);每个板块都有编号和名称,由plate.project.year和plate.number构成。例如,今年完成的一个项目中的106号标牌的名称为“17-0106”。我希望这个名字是唯一的 以下是我的模型: class Project(Model): __tablename__ = 'projects' id = Co

我有一个应用程序,我正在建设的烧瓶,其中包含项目和板块的模型,其中板块的项目作为外键

每个项目有一年,以整数形式给出(2017年为17);每个板块都有编号和名称,由plate.project.year和plate.number构成。例如,今年完成的一个项目中的106号标牌的名称为“17-0106”。我希望这个名字是唯一的

以下是我的模型:

class Project(Model):
    __tablename__   = 'projects'
    id              = Column(Integer, primary_key=True)
    name            = Column(String(64),unique=True)
    year            = Column(Integer,default=datetime.now().year-2000)

class Plate(Model):
    __tablename__   = 'plates'
    id              = Column(Integer, primary_key=True)
    number          = Column(Integer)
    project_id      = Column(Integer, ForeignKey('projects.id'))
    project         = relationship('Project',backref=backref('plates',cascade='all, delete-orphan'))

    @property
    def name(self):
        return str(self.project.year) + '-' + str(self.number).zfill(4)
我的第一个想法是使数字在具有相同project.year属性的板块中唯一,因此我尝试了不同的版本
\uuuu表参数(UniqueConstraint('project.year','number',name=''uu year\u number\u uc'))
,但这需要访问另一个表


在数据库中有这样做的方法吗?或者,如果失败,则使用
\uuuu init\uuu
方法检查number/project.year组合或name属性的唯一性?

您的问题有多种解决方案。例如,您可以反规范化
project.year number
组合,并将其存储为一个单独的
Plate
字段。然后你可以在上面放一把独特的钥匙。问题是你将如何保持这个价值。两个明显的选项是触发器(假设您的数据库支持触发器,并且您可以使用它们)或sqla事件,请参阅

两种解决方案都不会发出额外的SELECT查询。我相信这对你很重要

你的问题有点像