From ace7a97b2b50aa02708c91ba9b6d94d7e6024649 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Wed, 6 Nov 2019 20:24:41 -0800 Subject: [PATCH 1/2] test_insert_upsert_all_empty_list --- tests/test_create.py | 9 +++++++++ 1 file changed, 9 insertions(+) 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 From 8daea7f1265ddcce67d28258068a25666954000f Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Wed, 6 Nov 2019 20:27:11 -0800 Subject: [PATCH 2/2] Handle empty lists --- sqlite_utils/db.py | 5 ++++- 1 file changed, 4 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