Fehlerhafte SQLite Updates abfangen
Bei einem kleinen Projekt, an dem ich arbeite, fiel mir auf, dass fehlerhafte — d.h. syntaktisch richtige, aber inhaltlich falsche — SQLite Updates im Nirvana verschwinden. Danke Google und Stackexchange war die Lösung wie folgt: fehlerhafte SQL-Updates erzeugen keine Exception, hier muss man nach dem Update den rowcount
prüfen, um die Anzahl der aktualisierten Zeilen zu checken. Das folgende Programm illustriert das ganze:
import sqlite3 conn = sqlite3.connect(':memory:') conn.execute('create table if not exists mytable(id INTEGER PRIMARY KEY \ AUTOINCREMENT, status TEXT, prio TEXT)') today = '2020-08-06' cursor = conn.cursor() task = "Foobar" cursor.execute('insert into mytable(status, prio) values (?, ?)', [task, today]) conn.commit() my_id = 1 # For my_id = 1 it works, for any other number rowcount is 0 prio = 'A' cursor = conn.cursor() cursor.execute('UPDATE mytable SET prio = ? WHERE id = ?', [prio, my_id]) conn.commit() print(cursor.rowcount) try: cursor = conn.cursor() cursor.execute('select * from mytable') results = cursor.fetchall() for entry in results: print(entry) except Exception as err: print('Listing failed: %s\nError: %s' % str(err)) finally: cursor.close() |