Cursor.execute()
вызовет исключение только в случае сбоя оператора SQL, который он пытается выполнить - например:
>>> cur.execute("This is not SQL")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near "This": syntax error
или
>>> cur.execute("SELECT * FROM nonexistent_table;")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: no such table: nonexistent_table
Допустимый оператор SQL, который правильно ничего не делает, успешно выполнен, не завершился неудачей и поэтому не вызывает исключения. Ваш оператор DELETE
является правильным и ничего не делает, если не находит указанное значение для name
, поэтому ошибки нет.
Вы можете узнать, сколько строк было затронуто оператором SQL, используя атрибут Cursor.rowcount
. Переписав код для использования атрибута, выглядело бы примерно так:
name = input("Enter Student name you want to delete:")
cur.execute('DELETE FROM studentdata WHERE name = ?;', [name])
if cur.rowcount > 0:
print("Data Deleted Successfully")
conn.commit()
else:
print("No data found with this name:", name)
Примечание: я оставил commit()
там, где он был в вашем коде ... в зависимости от вашего приложения, возможно, он действительно был перемещен за пределы блока if
/ else
.