From 7c0ef116edd78f8970be32523d230340675db5bd Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Wed, 14 Oct 2020 14:59:38 -0700 Subject: [PATCH] pk=['id'] now equivalent to pk='id', closes #181 --- sqlite_utils/db.py | 2 ++ tests/test_create.py | 11 ++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index 178d48b..d517bdc 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -330,6 +330,8 @@ class Database: column_defs = [] # ensure pk is a tuple single_pk = None + if isinstance(pk, list) and len(pk) == 1 and isinstance(pk[0], str): + pk = pk[0] if isinstance(pk, str): single_pk = pk if pk not in [c[0] for c in column_items]: diff --git a/tests/test_create.py b/tests/test_create.py index 9e30d2b..83936e4 100644 --- a/tests/test_create.py +++ b/tests/test_create.py @@ -73,11 +73,12 @@ def test_create_table_compound_primary_key(fresh_db): assert ["id1", "id2"] == table.pks -def test_create_table_with_bad_defaults(fresh_db): - with pytest.raises(AssertionError): - fresh_db.create_table( - "players", {"name": str, "score": int}, defaults={"mouse": 1} - ) +@pytest.mark.parametrize("pk", ("id", ["id"])) +def test_create_table_with_single_primary_key(fresh_db, pk): + fresh_db["foo"].insert({"id": 1}, pk=pk) + assert ( + fresh_db["foo"].schema == "CREATE TABLE [foo] (\n [id] INTEGER PRIMARY KEY\n)" + ) def test_create_table_with_invalid_column_characters(fresh_db):