From 9f0fb6c601829cb7c9f449d57e12e8b95dab51f5 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Mon, 22 May 2017 14:08:55 -0400 Subject: Allow metadata.reflect() to recover from unreflectable tables Added support for views that are unreflectable due to stale table definitions, when calling :meth:`.MetaData.reflect`; a warning is emitted for the table that cannot respond to ``DESCRIBE`` but the operation succeeds. The MySQL dialect now raises UnreflectableTableError which is in turn caught by MetaData.reflect(). Reflecting the view standalone raises this error directly. Change-Id: Id8005219d8e073c154cc84a873df911b4a6cf4d6 Fixes: #3871 --- lib/sqlalchemy/sql/schema.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/sqlalchemy/sql/schema.py') diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index 1cdc7b425..a9aee5883 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -3903,7 +3903,10 @@ class MetaData(SchemaItem): name not in current] for name in load: - Table(name, self, **reflect_opts) + try: + Table(name, self, **reflect_opts) + except exc.UnreflectableTableError as uerr: + util.warn("Skipping table %s: %s" % (name, uerr)) def append_ddl_listener(self, event_name, listener): """Append a DDL event listener to this ``MetaData``. -- cgit v1.2.1