From fcbab3649d9d80e0c3fa1ddc2897cdaea9d3438e Mon Sep 17 00:00:00 2001 From: cloudyun888 <269269188+86cloudyun-afk@users.noreply.github.com> Date: Wed, 22 Apr 2026 15:14:25 +0800 Subject: [PATCH] fix: auto-commit delete_where() --- sqlite_utils/db.py | 7 ++++--- tests/test_delete.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index aacdc8933..41e1afe5f 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -2905,9 +2905,10 @@ def delete_where( sql = "delete from {}".format(quote_identifier(self.name)) if where is not None: sql += " where " + where - self.db.execute(sql, where_args or []) - if analyze: - self.analyze() + with self.db.conn: + self.db.execute(sql, where_args or []) + if analyze: + self.analyze() return self def update( diff --git a/tests/test_delete.py b/tests/test_delete.py index 652096ce4..c6175c4dc 100644 --- a/tests/test_delete.py +++ b/tests/test_delete.py @@ -1,3 +1,4 @@ +from sqlite_utils import Database def test_delete_rowid_table(fresh_db): table = fresh_db["table"] table.insert({"foo": 1}).last_pk @@ -32,6 +33,19 @@ def test_delete_where_all(fresh_db): assert table.count == 0 +def test_delete_where_all_auto_commits(db_path): + db = Database(db_path) + table = db["table"] + table.insert_all(({"id": i} for i in range(1, 6)), pk="id") + assert table.count == 5 + + table.delete_where() + assert table.count == 0 + + reopened = Database(db_path) + assert reopened["table"].count == 0 + + def test_delete_where_analyze(fresh_db): table = fresh_db["table"] table.insert_all(({"id": i, "i": i} for i in range(10)), pk="id")