为什么删除非现有记录不会在sqlalchemy中引发错误。 没有反馈记录是否被删除。
session.query(Element).filter(Element.id==ElementId).delete()
感谢您的澄清。
ž
答案 0 :(得分:4)
我不认为这是一个错误。例如,发出查询以删除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
上面会发出一个额外的查询...
此外,如果您想要一个引发错误的delete
方法,您可以创建自己的会话类
Change SQLAlchemy's Session.delete() behaviour
并覆盖delete
返回已删除的行数,不包括任何级联。
这是查看是否删除任何行的另一个选项
答案 1 :(得分:0)
实际上,sqlalchemy删除操作返回受影响的行数。因此,您可以检查并且如果受影响的行为0,则可以引发错误。
effected_rows = session.query(Element).filter(Element.id==ElementId).delete()
if effected_rows == 0:
# raise exception
else:
# delete element
这对我有用。
答案 2 :(得分:0)
向@madogan添加答案,编辑队列已满,因此编写了新答案。
我在一个可行的解决方案中更详细地扩展了他的答案:
class NoEntryFoundException(Exception):
pass
def delete_row_entry(element_id: int):
effected_rows = session.query(Element).filter(Element.id == element_id).delete()
if effected_rows == 0:
raise NoEntryFoundException(f'No row entry found with id: {element_id}')
else:
session.commit()