]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Remove tables from metadata when autoload fails
authorRoman Podoliaka <roman.podoliaka@gmail.com>
Tue, 11 Mar 2014 00:34:42 +0000 (17:34 -0700)
committerRoman Podoliaka <roman.podoliaka@gmail.com>
Thu, 13 Mar 2014 00:56:42 +0000 (17:56 -0700)
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
test/engine/test_reflection.py

index abca124a454d2bfa8c404e6c316c7b2dd9c33029..e29fe456f1ea257a2d9955510999ec1576768d65 100644 (file)
@@ -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
 
 
index a46c7372ecdfd6bd374687b0b3acf9a5da7aa107..446bb8a360d3a7047116e2723b51777faa604f4d 100644 (file)
@@ -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):