背景
因为我有两个数据表,本来是主表的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键判断,唯一键优先
比如
以上数据模型就不会重复创建,因为我创建数据没有写id,所以根据唯一键unique确定是否相同
以下重复创建就会出错,如果不给主键复制并且没有唯一键就会重复创建,学会了吗?
给name加上unqie就不会重复创建了!!!