From 934ac330ea812395b66f82e13afc034303bafc9c Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 19 Jul 2006 22:20:49 +0000 Subject: [PATCH] added table.exists() --- CHANGES | 3 ++- lib/sqlalchemy/schema.py | 10 ++++++++++ test/engine/reflection.py | 3 +++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 564eef21fd..d6e2e84631 100644 --- a/CHANGES +++ b/CHANGES @@ -44,7 +44,8 @@ aware of their "inherited" status if so. relationships to an inheriting mapper (which is also self-referential) - reduced bind param size in query._get to appease the picky oracle [ticket:244] -- added 'checkfirst' argument to table.create()/table.drop() +- added 'checkfirst' argument to table.create()/table.drop(), as +well as table.exists() [ticket:234] 0.2.5 - fixed endless loop bug in select_by(), if the traversal hit diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 8fce1665d8..6b44cda298 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -236,6 +236,16 @@ class Table(SchemaItem, sql.TableClause): this does not issue a SQL DROP statement.""" key = _get_table_key(self.name, self.schema) del self.metadata.tables[key] + + def exists(self, engine=None): + if engine is None and self.metadata.is_bound(): + engine = self.engine + + def do(conn): + e = conn.engine + return e.dialect.has_table(conn, self.name) + return engine.run_callable(do) + def create(self, connectable=None, checkfirst=False): if connectable is not None: connectable.create(self, checkfirst=checkfirst) diff --git a/test/engine/reflection.py b/test/engine/reflection.py index 64a645d0f9..582920b304 100644 --- a/test/engine/reflection.py +++ b/test/engine/reflection.py @@ -162,10 +162,13 @@ class ReflectionTest(PersistTest): Column('col1', Integer, primary_key=True), Column('col2', String(40))) try: + assert not table.exists() table.create() + assert table.exists() table.create(checkfirst=True) table.drop() table.drop(checkfirst=True) + assert not table.exists() table.create(checkfirst=True) table.drop() finally: -- 2.47.2