diff --git a/Makefile b/Makefile index ad79deb..22f134c 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ all: clean test dists .PHONY: test test: - nosetests -v + pytest dists: python setup.py sdist diff --git a/dataset/database.py b/dataset/database.py index b3ecfc2..22d1a49 100644 --- a/dataset/database.py +++ b/dataset/database.py @@ -93,6 +93,9 @@ class Database(object): """Get a SQLAlchemy inspector.""" return inspect(self.executable) + def has_table(self, name): + return self.inspect.has_table(name, schema=self.schema) + @property def metadata(self): """Return a SQLAlchemy schema cache object.""" diff --git a/dataset/table.py b/dataset/table.py index c8d1948..8462f34 100644 --- a/dataset/table.py +++ b/dataset/table.py @@ -228,7 +228,9 @@ class Table(object): chunk = [] columns = [] for index, row in enumerate(rows): - columns.extend(col for col in row.keys() if (col not in columns) and (col not in keys)) + columns.extend( + col for col in row.keys() if (col not in columns) and (col not in keys) + ) # bindparam requires names to not conflict (cannot be "id" for id) for key in keys: @@ -240,7 +242,7 @@ class Table(object): if len(chunk) == chunk_size or index == len(rows) - 1: cl = [self.table.c[k] == bindparam("_%s" % k) for k in keys] stmt = self.table.update( - whereclause=and_(*cl), + whereclause=and_(True, *cl), values={col: bindparam(col, required=False) for col in columns}, ) self.db.executable.execute(stmt, chunk) @@ -431,7 +433,7 @@ class Table(object): clauses.append(self._generate_clause(column, op, op_value)) else: clauses.append(self._generate_clause(column, "=", value)) - return and_(*clauses) + return and_(True, *clauses) def _args_to_order_by(self, order_by): orderings = [] diff --git a/dataset/util.py b/dataset/util.py index 49512f4..1753283 100644 --- a/dataset/util.py +++ b/dataset/util.py @@ -14,7 +14,7 @@ class DatasetException(Exception): def convert_row(row_type, row): if row is None: return None - return row_type(row.items()) + return row_type(row._mapping.items()) def iter_result_proxy(rp, step=None): diff --git a/setup.py b/setup.py index 2631d03..518a42d 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,7 @@ setup( extras_require={ "dev": [ "pip", - "nose", + "pytest", "wheel", "flake8", "coverage", @@ -42,7 +42,7 @@ setup( "cryptography", ] }, - tests_require=["nose"], + tests_require=["pytest"], test_suite="test", entry_points={}, ) diff --git a/test/test_dataset.py b/test/test_dataset.py index 9c2bb8e..f7c94eb 100644 --- a/test/test_dataset.py +++ b/test/test_dataset.py @@ -35,7 +35,7 @@ class DatabaseTestCase(unittest.TestCase): def test_create_table(self): table = self.db["foo"] - assert table.table.exists() + assert self.db.has_table(table.table.name) assert len(table.table.columns) == 1, table.table.columns assert "id" in table.table.c, table.table.c @@ -51,7 +51,7 @@ class DatabaseTestCase(unittest.TestCase): def test_create_table_custom_id1(self): pid = "string_id" table = self.db.create_table("foo2", pid, self.db.types.string(255)) - assert table.table.exists() + assert self.db.has_table(table.table.name) assert len(table.table.columns) == 1, table.table.columns assert pid in table.table.c, table.table.c table.insert({pid: "foobar"}) @@ -60,7 +60,7 @@ class DatabaseTestCase(unittest.TestCase): def test_create_table_custom_id2(self): pid = "string_id" table = self.db.create_table("foo3", pid, self.db.types.string(50)) - assert table.table.exists() + assert self.db.has_table(table.table.name) assert len(table.table.columns) == 1, table.table.columns assert pid in table.table.c, table.table.c @@ -70,7 +70,7 @@ class DatabaseTestCase(unittest.TestCase): def test_create_table_custom_id3(self): pid = "int_id" table = self.db.create_table("foo4", primary_id=pid) - assert table.table.exists() + assert self.db.has_table(table.table.name) assert len(table.table.columns) == 1, table.table.columns assert pid in table.table.c, table.table.c