关于sqlalchemy 的数据merge操作

背景

因为我有两个数据表,本来是主表的id主键组为附表的外键,但是由于主键id的自增性,查阅了很多资料和论坛不好处理
关于什么是自增id导致id不连续
当我们在对数据库增删的时候,如果删除第二行在插入一行,就会发现新插入的id为3,id为2的主键值消失了。这样如果id被别的数据库绑定了外键,那么在我们删除又添加同一行数据的时候,附表会查找错误

解决办法,使用merge

使用merge可以在没有数据记录的时候添加记录,又数据记录的时候修改更新数据。
如果 Experiment 有主键(如 id),直接用 merge():
python

def create_or_update_experiment(experiment: Experiment):
    db = SessionLocal()
    db_experiment = db.merge(experiment)  # 自动新增或更新
    db.commit()
    db.refresh(db_experiment)
    db.close()
    return db_experiment

可以发现merge是根据是否有主键或者有唯一的unique键判断,唯一键优先

比如
image
以上数据模型就不会重复创建,因为我创建数据没有写id,所以根据唯一键unique确定是否相同
以下重复创建就会出错,如果不给主键复制并且没有唯一键就会重复创建,学会了吗?
image

给name加上unqie就不会重复创建了!!!

posted @ 2025-03-27 19:40  学不会xuebuhui  阅读(162)  评论(0)    收藏  举报
Language: javascript //图片预览