删除不存在的记录应该会在 sqlalchemy 中引发错误

zor*_*rro 5 python sqlalchemy

为什么删除不存在的记录不会在 sqlalchemy 中引发错误。没有关于记录是否被删除的反馈。

session.query(Element).filter(Element.id==ElementId).delete()
Run Code Online (Sandbox Code Playgroud)

谢谢你的澄清。

dm0*_*514 7

我不认为这是一个错误。例如,发出查询以删除 sql 中“不存在”的记录是完全合法的

如果我有一个带有“id”列的“posts”表。没有记录

DELETE FROM posts WHERE ID > 0;

这是完全有效的sql,没有错误,即使没有行

我对 sqlalchmey 不太熟悉,但您能先检查一下值是否存在吗?

element = session.query(Element).filter(Element.id==ElementId).first()
if element:
   # delete element
else:
   # raise exception
Run Code Online (Sandbox Code Playgroud)

虽然上面会发出一个额外的查询......

此外,如果您想要一个delete引发错误的方法,您可以创建自己的会话类 更改 SQLAlchemy 的 Session.delete() 行为 并覆盖delete

正如zzzeek指出delete的标准

返回删除的行数,不包括任何级联。

这是查看是否删除任何行的另一种选择

  • 条件上的 delete() 将返回匹配的行数,因此您可以对此进行断言。否则这个答案是正确的,如果你想要一个身份的检查删除你必须使用 session.delete()。 (5认同)