delete_where() now commits inside a transaction, refs #815

This commit is contained in:
Simon Willison 2026-07-25 17:22:17 -07:00
commit bf133b4825
2 changed files with 18 additions and 1 deletions

View file

@ -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

View file

@ -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")