From d5a419cbe090e65d038a65830ceaae4304401d53 Mon Sep 17 00:00:00 2001 From: Simon Conseil Date: Wed, 18 Feb 2015 14:45:45 +0100 Subject: [PATCH 1/2] Reflect views. Currently views does not appear in the list of tables, this allows to add views. --- dataset/__init__.py | 23 +++++++++++++++-------- dataset/persistence/database.py | 4 ++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/dataset/__init__.py b/dataset/__init__.py index 5c205f8..25693d6 100644 --- a/dataset/__init__.py +++ b/dataset/__init__.py @@ -12,14 +12,21 @@ from dataset.freeze.app import freeze __all__ = ['Database', 'Table', 'freeze', 'connect'] -def connect(url=None, schema=None, reflectMetadata=True, engine_kwargs=None): +def connect(url=None, schema=None, reflectMetadata=True, engine_kwargs=None, + reflect_views=True): """ - Opens a new connection to a database. *url* can be any valid `SQLAlchemy engine URL`_. - 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. Additionally, *engine_kwargs* will be directly passed to - SQLAlchemy, e.g. set *engine_kwargs={'pool_recycle': 3600}* will avoid `DB connection timeout`_. + Opens a new connection to a database. + + *url* can be any valid `SQLAlchemy engine URL`_. 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. *reflect_views* can be set to False if you don't want views to be + loaded. 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') @@ -34,4 +41,4 @@ def connect(url=None, schema=None, reflectMetadata=True, engine_kwargs=None): sqlite_datetime_fix() return Database(url, schema=schema, reflectMetadata=reflectMetadata, - engine_kwargs=engine_kwargs) + engine_kwargs=engine_kwargs, reflect_views=reflect_views) diff --git a/dataset/persistence/database.py b/dataset/persistence/database.py index 175384e..172d93a 100644 --- a/dataset/persistence/database.py +++ b/dataset/persistence/database.py @@ -25,7 +25,7 @@ log = logging.getLogger(__name__) class Database(object): def __init__(self, url, schema=None, reflectMetadata=True, - engine_kwargs=None): + engine_kwargs=None, reflect_views=True): if engine_kwargs is None: engine_kwargs = {} @@ -50,7 +50,7 @@ class Database(object): self.metadata = MetaData(schema=schema) self.metadata.bind = self.engine if reflectMetadata: - self.metadata.reflect(self.engine) + self.metadata.reflect(self.engine, views=reflect_views) self._tables = {} @property From 24e53b68079e8996c329c7e5aaf8244ce052bbd2 Mon Sep 17 00:00:00 2001 From: Simon Conseil Date: Wed, 18 Feb 2015 16:48:46 +0100 Subject: [PATCH 2/2] Make Travis happy. --- dataset/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dataset/__init__.py b/dataset/__init__.py index 25693d6..1a17e6d 100644 --- a/dataset/__init__.py +++ b/dataset/__init__.py @@ -1,14 +1,14 @@ import os -# shut up useless SA warning: import warnings -warnings.filterwarnings( - 'ignore', 'Unicode type received non-unicode bind param value.') - from dataset.persistence.util import sqlite_datetime_fix from dataset.persistence.database import Database from dataset.persistence.table import Table from dataset.freeze.app import freeze +# shut up useless SA warning: +warnings.filterwarnings( + 'ignore', 'Unicode type received non-unicode bind param value.') + __all__ = ['Database', 'Table', 'freeze', 'connect']