Python 在sqlalchemy中提交时,是否有添加和删除的顺序

Python 在sqlalchemy中提交时,是否有添加和删除的顺序,python,sqlalchemy,Python,Sqlalchemy,我在sqlalchemy中向表中添加了一组条目。如果一个条目已经存在,我会根据某个键删除表中的行,然后添加“updated”条目。完成删除和添加所有条目后,我提交会话。但是,在测试期间,由于唯一约束失败,提交失败。我对这个错误的理解是,我试图在删除旧条目之前添加更新的条目。如果我删除旧条目,然后提交,然后添加,一切正常 所以我的问题是,sqlalchemy是否有定义的删除和添加操作顺序?可以更改这个订单吗?查看我的代码,我注意到我要添加的对象实例化了两次,但只添加了一次(见下文)——可能这是个问

我在sqlalchemy中向表中添加了一组条目。如果一个条目已经存在,我会根据某个键删除表中的行,然后添加“updated”条目。完成删除和添加所有条目后,我提交会话。但是,在测试期间,由于唯一约束失败,提交失败。我对这个错误的理解是,我试图在删除旧条目之前添加更新的条目。如果我删除旧条目,然后提交,然后添加,一切正常

所以我的问题是,sqlalchemy是否有定义的删除和添加操作顺序?可以更改这个订单吗?查看我的代码,我注意到我要添加的对象实例化了两次,但只添加了一次(见下文)——可能这是个问题(但不确定为什么会这样)

我也不想要commit(),因为我只想在添加/更新完所有条目后提交

#在循环中
#-----------------------
临时文件=文件(文件)
dirty\u doc=session.query(Document).filter(Document.local\u id==temp.local\u id).first()
#其他不相关的代码在这里。。。
会话.删除(脏文档)
#这似乎是必要的,但我不认为它是必要的
session.commit()
#稍后在代码中。。。
如果添加新文档:
临时文件=文件(文件)
会话添加(临时文档)
#圈外
#-----------------------------
session.commit()
session.close()

这里提出了一个类似但不同的问题,关于添加的对象中是否保持了顺序:

这促使我查看会话代码,因为我还没有看到任何关于刷新行为的文档

会话代码链接:

搜索
def\u刷新(self

在代码中,添加和更新似乎是在删除之前完成的,这可以解释为什么我遇到了问题

作为修复,我现在正在刷新而不是提交(在循环内),这似乎解决了问题。我假设刷新顺序保持不变,即先刷新的命令首先被提交/保存