From 0bb00db558123209c3ffb8eab580dcf1823f36b4 Mon Sep 17 00:00:00 2001 From: Roman Podoliaka Date: Mon, 10 Mar 2014 17:34:42 -0700 Subject: Remove tables from metadata when autoload fails If autoloading of a table fails, don't register it in a metadata instance. It seems that the original behaviour was accidentally changed in f6198d9abf453182f4b111e0579a7a4ef1614e79, restore it. Closes issue #2988 --- lib/sqlalchemy/sql/schema.py | 2 +- test/engine/test_reflection.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index abca124a4..e29fe456f 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -353,7 +353,7 @@ class Table(DialectKWArgs, SchemaItem, TableClause): table.dispatch.after_parent_attach(table, metadata) return table except: - #metadata._remove_table(name, schema) + metadata._remove_table(name, schema) raise diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py index a46c7372e..446bb8a36 100644 --- a/test/engine/test_reflection.py +++ b/test/engine/test_reflection.py @@ -92,6 +92,7 @@ class ReflectionTest(fixtures.TestBase, ComparesTables): meta = MetaData(testing.db) assert_raises(sa.exc.NoSuchTableError, Table, 'nonexistent', meta, autoload=True) + assert 'nonexistent' not in meta.tables @testing.provide_metadata def test_include_columns(self): -- cgit v1.2.1