From 25477717bce70b1fb1120295fe89612f8c53f226 Mon Sep 17 00:00:00 2001 From: Andrey Alekseenko Date: Thu, 14 Feb 2019 22:35:47 -0500 Subject: [PATCH] Fix bug when UPSERTing a column named 'id' --- dataset/table.py | 14 ++++++++++---- test/test_dataset.py | 6 ++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/dataset/table.py b/dataset/table.py index bf829df..88c5c8a 100644 --- a/dataset/table.py +++ b/dataset/table.py @@ -29,8 +29,14 @@ class Table(object): self.name = normalize_table_name(table_name) self._table = None self._indexes = [] - self._primary_id = primary_id - self._primary_type = primary_type + if primary_id is not None: + self._primary_id = primary_id + else: + self._primary_id = self.PRIMARY_DEFAULT + if primary_type is not None: + self._primary_type = primary_type + else: + self._primary_type = Types.integer self._auto_create = auto_create @property @@ -235,8 +241,8 @@ class Table(object): if self._primary_id is not False: # This can go wrong on DBMS like MySQL and SQLite where # tables cannot have no columns. - primary_id = self._primary_id or self.PRIMARY_DEFAULT - primary_type = self._primary_type or Types.integer + primary_id = self._primary_id + primary_type = self._primary_type increment = primary_type in [Types.integer, Types.bigint] column = Column(primary_id, primary_type, primary_key=True, diff --git a/test/test_dataset.py b/test/test_dataset.py index a6c8f89..e60caf6 100644 --- a/test/test_dataset.py +++ b/test/test_dataset.py @@ -236,6 +236,12 @@ class TableTestCase(unittest.TestCase): ) assert len(self.tbl) == len(TEST_DATA) + 1, len(self.tbl) + def test_upsert_id(self): + table = self.db['banana_with_id'] + data = dict(id=10, title='I am a banana!') + table.upsert(data, ['id']) + assert len(table) == 1, len(table) + def test_update_while_iter(self): for row in self.tbl: row['foo'] = 'bar'