diff --git a/dataset/__init__.py b/dataset/__init__.py index 84963a0..5c205f8 100644 --- a/dataset/__init__.py +++ b/dataset/__init__.py @@ -18,12 +18,14 @@ def connect(url=None, schema=None, reflectMetadata=True, engine_kwargs=None): If *url* is not defined it will try to use *DATABASE_URL* from environment variable. Returns an instance of :py:class:`Database `. Set *reflectMetadata* to False if you don't want the entire database schema to be pre-loaded. This significantly speeds up - connecting to large databases with lots of tables. + connecting to large databases with lots of tables. Additionally, *engine_kwargs* will be directly passed to + SQLAlchemy, e.g. set *engine_kwargs={'pool_recycle': 3600}* will avoid `DB connection timeout`_. :: db = dataset.connect('sqlite:///factbook.db') .. _SQLAlchemy Engine URL: http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine + .. _DB connection timeout: http://docs.sqlalchemy.org/en/latest/core/pooling.html#setting-pool-recycle """ if url is None: url = os.environ.get('DATABASE_URL', url) diff --git a/dataset/persistence/database.py b/dataset/persistence/database.py index d87963a..0687681 100644 --- a/dataset/persistence/database.py +++ b/dataset/persistence/database.py @@ -80,7 +80,7 @@ class Database(object): self.local.must_release = True def _release_internal(self): - if not hasattr(self.local, 'must_release') and self.local.must_release: + if getattr(self.local, 'must_release', None): self.lock.release() self.local.must_release = False @@ -141,6 +141,9 @@ class Database(object): set(self.metadata.tables.keys()) | set(self._tables.keys()) ) + def __contains__(self, member): + return member in self.tables + def create_table(self, table_name, primary_id='id', primary_type='Integer'): """ Creates a new table. The new table will automatically have an `id` column @@ -253,7 +256,7 @@ class Database(object): """ Run a statement on the database directly, allowing for the execution of arbitrary read/write queries. A query can either be - a plain text string, or a `SQLAlchemy expression `_. The returned + a plain text string, or a `SQLAlchemy expression `_. The returned iterator will yield each result sequentially. Any keyword arguments will be passed into the query to perform diff --git a/docs/_themes/kr/sidebarlogo.html b/docs/_themes/kr/sidebarlogo.html index 4631beb..5f088f8 100644 --- a/docs/_themes/kr/sidebarlogo.html +++ b/docs/_themes/kr/sidebarlogo.html @@ -1,4 +1,4 @@ -dataset +dataset

Because managing databases in Python should be as simple as reading and writing JSON files.

diff --git a/docs/quickstart.rst b/docs/quickstart.rst index f4682ad..f5f0cc4 100644 --- a/docs/quickstart.rst +++ b/docs/quickstart.rst @@ -75,7 +75,7 @@ statement:: with dataset.connect() as tx: tx['user'].insert(dict(name='John Doe', age=46, country='China')) -You can get same functionality by invocing the methods :py:meth:`begin() `, +You can get same functionality by invoking the methods :py:meth:`begin() `, :py:meth:`commit() ` and :py:meth:`rollback() ` explicitly:: @@ -92,7 +92,7 @@ Nested transactions are supported too:: db = dataset.connect() with db as tx1: tx1['user'].insert(dict(name='John Doe', age=46, country='China')) - with db sa tx2: + with db as tx2: tx2['user'].insert(dict(name='Jane Doe', age=37, country='France', gender='female')) diff --git a/setup.py b/setup.py index a6f61ee..a076443 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ if sys.version_info[:2] <= (2, 6): setup( name='dataset', - version='0.5.4', + version='0.5.5', description="Toolkit for Python-based data processing.", long_description="", classifiers=[ diff --git a/test/test_persistence.py b/test/test_persistence.py index 6040999..c009c42 100644 --- a/test/test_persistence.py +++ b/test/test_persistence.py @@ -38,6 +38,9 @@ class DatabaseTestCase(unittest.TestCase): def test_tables(self): assert self.db.tables == ['weather'], self.db.tables + def test_contains(self): + assert 'weather' in self.db, self.db.tables + def test_create_table(self): table = self.db['foo'] assert table.table.exists()