You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:48:17