From 8dab9fd1ccf571e188eec9ccf606a0c50fccf200 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Wed, 6 Nov 2019 20:32:37 -0800 Subject: [PATCH] insert_all() / .upsert_all() work with empty list (#64) Closes #52 --- sqlite_utils/db.py | 5 ++++- tests/test_create.py | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index a51bba7..d44b238 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -977,7 +977,10 @@ class Table(Queryable): # we need to adjust the batch_size down if we have too many cols records = iter(records) # Peek at first record to count its columns: - first_record = next(records) + try: + first_record = next(records) + except StopIteration: + return self # It was an empty list num_columns = len(first_record.keys()) assert ( num_columns <= SQLITE_MAX_VARS diff --git a/tests/test_create.py b/tests/test_create.py index 05dfe4a..e2dec84 100644 --- a/tests/test_create.py +++ b/tests/test_create.py @@ -789,3 +789,12 @@ def test_drop_view(fresh_db): assert ["foo_view"] == fresh_db.view_names() assert None is fresh_db["foo_view"].drop() assert [] == fresh_db.view_names() + + +def test_insert_upsert_all_empty_list(fresh_db): + fresh_db["t"].insert({"foo": 1}) + assert 1 == fresh_db["t"].count + fresh_db["t"].insert_all([]) + assert 1 == fresh_db["t"].count + fresh_db["t"].upsert_all([]) + assert 1 == fresh_db["t"].count