diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index 9c0b402..8aead18 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -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 diff --git a/tests/test_introspect.py b/tests/test_introspect.py index 343424d..8428533 100644 --- a/tests/test_introspect.py +++ b/tests/test_introspect.py @@ -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"}] == [