【发布时间】:2020-03-23 03:10:43
【问题描述】:
我正在向 sqlalchemy 的表中添加一堆条目。如果条目已经存在,基于某个键,我删除表中的行,然后添加“更新”条目。完成删除和添加所有条目后,我提交会话。然而,在测试期间,由于唯一约束失败,提交失败。我对此错误的理解是,我正在尝试在删除旧条目之前添加更新的条目。如果我删除旧条目,然后提交,然后添加,一切正常。
所以我的问题是,sqlalchemy 是否有定义的删除和添加操作顺序?是否可以更改此顺序?查看我的代码,我注意到我添加的对象被实例化了两次,但只添加了一次(见下文)-也许这是一个问题(但不确定为什么会这样)。
我也不想要 commit(),因为我只想在完成添加/更新所有条目后提交。
#Inside a loop
#-----------------------
temp_doc = Document(doc)
dirty_doc = session.query(Document).filter(Document.local_id == temp.local_id).first()
#other non-relevant code here ...
session.delete(dirty_doc)
#This seems to be needed but I wouldn't expect it to be
session.commit()
#Later on in the code ...
if add_new_doc:
temp_doc = Document(doc)
session.add(temp_doc)
#Outside the loop
#-----------------------------
session.commit()
session.close()
【问题讨论】:
标签: python sqlalchemy