diff --git a/dataset/persistence/database.py b/dataset/persistence/database.py new file mode 100644 index 0000000..c7a8814 --- /dev/null +++ b/dataset/persistence/database.py @@ -0,0 +1,35 @@ +import logging +from threading import RLock + +from sqlalchemy import create_engine +from migrate.versioning.util import construct_engine +from sqlalchemy.pool import NullPool + +log = logging.getLogger(__name__) + + +class Database(object): + + def __init__(self, url): + kw = {} + if url.startswith('postgres'): + kw['poolclass'] = NullPool + engine = create_engine(url, **kw) + self.lock = RLock() + self.url = url + self.engine = construct_engine(engine) + self.metadata = MetaData() + self.metadata.bind = self.engine + self.tables = {} + self.indexes = {} + + @classmethod + def connect(self, url): + return Database(url) + + + def __repr__(self): + return '' % self.url + + + diff --git a/dataset/schema.py b/dataset/schema.py index 281acec..40b5d19 100644 --- a/dataset/schema.py +++ b/dataset/schema.py @@ -1,32 +1,13 @@ import logging from datetime import datetime from collections import defaultdict -from threading import RLock -from sqlalchemy import create_engine from sqlalchemy import Integer, UnicodeText, Float, DateTime, Boolean from sqlalchemy.schema import Table, MetaData, Column, Index from sqlalchemy.sql import and_, expression -from migrate.versioning.util import construct_engine log = logging.getLogger(__name__) -lock = RLock() -def connect(url): - """ Create an engine for the given database URL. """ - kw = {} - if url.startswith('postgres'): - #kw['pool_size'] = 5 - from sqlalchemy.pool import NullPool - kw['poolclass'] = NullPool - engine = create_engine(url, **kw) - engine = construct_engine(engine) - meta = MetaData() - meta.bind = engine - engine._metadata = meta - engine._tables = dict() - engine._indexes = dict() - return engine def create_table(engine, table_name): with lock: