Fix count_where() raising OperationalError on nonexistent tables

rows_where() and delete_where() already return gracefully when called
on a table that does not exist yet; count_where() now does the same by
returning 0 instead of propagating OperationalError from SQLite.
This commit is contained in:
Claude 2026-08-13 16:40:55 +00:00
commit 4fd34b85ad
No known key found for this signature in database
2 changed files with 8 additions and 0 deletions

View file

@ -2023,6 +2023,8 @@ class Queryable:
:param where_args: Parameters to use with that fragment - an iterable for ``id > ?``
parameters, or a dictionary for ``id > :id``
"""
if not self.exists():
return 0
sql = f"select count(*) from {quote_identifier(self.name)}"
if where is not None:
sql += " where " + where

View file

@ -96,6 +96,12 @@ def test_count_where(existing_db):
assert existing_db.table("foo").count_where("text != :t", {"t": "two"}) == 2
def test_count_where_nonexistent_table(fresh_db):
assert fresh_db.table("does_not_exist").count_where() == 0
assert fresh_db.table("does_not_exist").count_where("id > ?", [5]) == 0
assert fresh_db.table("does_not_exist").count == 0
def test_columns(existing_db):
table = existing_db.table("foo")
assert [{"name": "text", "type": "TEXT"}] == [