From bf133b4825a2301312cd0dbaa49f099b0ceaab5e Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sat, 25 Jul 2026 17:22:17 -0700 Subject: [PATCH] delete_where() now commits inside a transaction, refs #815 --- sqlite_utils/db.py | 3 ++- tests/test_delete.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index 8939a68..f0ae6a4 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -2773,7 +2773,8 @@ class Table(Queryable): sql = "delete from [{}]".format(self.name) if where is not None: sql += " where " + where - self.db.execute(sql, where_args or []) + with self.db.conn: + self.db.execute(sql, where_args or []) if analyze: self.analyze() return self diff --git a/tests/test_delete.py b/tests/test_delete.py index 652096c..0f2f3fe 100644 --- a/tests/test_delete.py +++ b/tests/test_delete.py @@ -1,3 +1,6 @@ +import sqlite_utils + + def test_delete_rowid_table(fresh_db): table = fresh_db["table"] table.insert({"foo": 1}).last_pk @@ -32,6 +35,19 @@ def test_delete_where_all(fresh_db): assert table.count == 0 +def test_delete_where_commits(tmpdir): + path = str(tmpdir / "test.db") + db = sqlite_utils.Database(path) + db["table"].insert_all([{"id": i} for i in range(5)], pk="id") + db["table"].delete_where("id > ?", [2]) + assert not db.conn.in_transaction + db.close() + + reopened_db = sqlite_utils.Database(path) + assert [row["id"] for row in reopened_db["table"].rows] == [0, 1, 2] + reopened_db.close() + + 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")