如何在PonyORM中为两个字段添加联合唯一约束
PonyORM 多字段组合唯一约束实现方案
针对Child表parent和name字段组合唯一、同Parent下不允许重名Child的需求,可通过以下两种方式实现:
方式1:通过
_table_options_配置(全版本兼容)
在Child实体类内定义表配置项,通过unique_indexes声明联合唯一的字段组合,示例代码如下:from pony.orm import Database, Required, Set db = Database() # 此处省略数据库绑定参数配置 class Parent(db.Entity): name = Required(str) children = Set("Child") class Child(db.Entity): parent = Required(Parent) name = Required(str) # 声明联合唯一约束 _table_options_ = { "unique_indexes": [(parent, name)] } # 首次生成映射建表时会自动创建对应唯一索引 db.generate_mapping(create_tables=True)方式2:字段级unique参数写法(适用于PonyORM 0.7.7+版本)
高版本PonyORM支持直接在字段的unique参数中传入同组联合唯一的关联字段,写法更简洁:class Child(db.Entity): parent = Required(Parent) # 直接指定name和parent字段组合唯一 name = Required(str, unique=parent)
注意:如果对应数据表已经存在,新增约束后需要执行数据库迁移,将唯一索引同步到数据库层面,否则约束仅在ORM校验层生效。
内容的提问来源于stack exchange,提问作者lial_slasher
相关产品推荐
相关产品推荐

