Python 具有foreignkey属性的sqlalchemy唯一约束
我有一个应用程序,我正在建设的烧瓶,其中包含项目和板块的模型,其中板块的项目作为外键 每个项目有一年,以整数形式给出(2017年为17);每个板块都有编号和名称,由plate.project.year和plate.number构成。例如,今年完成的一个项目中的106号标牌的名称为“17-0106”。我希望这个名字是唯一的 以下是我的模型: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
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查询。我相信这对你很重要
你的问题有点像