summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine/reflection.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2019-02-28 10:59:41 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2019-02-28 13:49:09 -0500
commita690ec082451ca0636fb45a0d9773a240ae30373 (patch)
tree427ce67495efa3447dd4326448b4a93158826a0c /lib/sqlalchemy/engine/reflection.py
parent358a0dcf10c27b3f209ac887be9960eccd588a7d (diff)
downloadsqlalchemy-a690ec082451ca0636fb45a0d9773a240ae30373.tar.gz
Add resolve_fks=False option for reflection
Added new parameters :paramref:`.Table.resolve_fks` and :paramref:`.MetaData.reflect.resolve_fks` which when set to False will disable the automatic reflection of related tables encountered in :class:`.ForeignKey` objects, which can both reduce SQL overhead for omitted tables as well as avoid tables that can't be reflected for database-specific reasons. Two :class:`.Table` objects present in the same :class:`.MetaData` collection can still refer to each other even if the reflection of the two tables occurred separately. Fixes: #4517 Change-Id: I623baed42042a16c5109e4c8af6b2f64d2d00f95
Diffstat (limited to 'lib/sqlalchemy/engine/reflection.py')
-rw-r--r--lib/sqlalchemy/engine/reflection.py47
1 files changed, 28 insertions, 19 deletions
diff --git a/lib/sqlalchemy/engine/reflection.py b/lib/sqlalchemy/engine/reflection.py
index 14d647b9a..888149226 100644
--- a/lib/sqlalchemy/engine/reflection.py
+++ b/lib/sqlalchemy/engine/reflection.py
@@ -561,7 +561,12 @@ class Inspector(object):
)
def reflecttable(
- self, table, include_columns, exclude_columns=(), _extend_on=None
+ self,
+ table,
+ include_columns,
+ exclude_columns=(),
+ resolve_fks=True,
+ _extend_on=None,
):
"""Given a Table object, load its internal constructs based on
introspection.
@@ -650,6 +655,7 @@ class Inspector(object):
table,
cols_by_orig_name,
exclude_columns,
+ resolve_fks,
_extend_on,
reflection_options,
)
@@ -783,6 +789,7 @@ class Inspector(object):
table,
cols_by_orig_name,
exclude_columns,
+ resolve_fks,
_extend_on,
reflection_options,
):
@@ -806,29 +813,31 @@ class Inspector(object):
referred_columns = fkey_d["referred_columns"]
refspec = []
if referred_schema is not None:
- sa_schema.Table(
- referred_table,
- table.metadata,
- autoload=True,
- schema=referred_schema,
- autoload_with=self.bind,
- _extend_on=_extend_on,
- **reflection_options
- )
+ if resolve_fks:
+ sa_schema.Table(
+ referred_table,
+ table.metadata,
+ autoload=True,
+ schema=referred_schema,
+ autoload_with=self.bind,
+ _extend_on=_extend_on,
+ **reflection_options
+ )
for column in referred_columns:
refspec.append(
".".join([referred_schema, referred_table, column])
)
else:
- sa_schema.Table(
- referred_table,
- table.metadata,
- autoload=True,
- autoload_with=self.bind,
- schema=sa_schema.BLANK_SCHEMA,
- _extend_on=_extend_on,
- **reflection_options
- )
+ if resolve_fks:
+ sa_schema.Table(
+ referred_table,
+ table.metadata,
+ autoload=True,
+ autoload_with=self.bind,
+ schema=sa_schema.BLANK_SCHEMA,
+ _extend_on=_extend_on,
+ **reflection_options
+ )
for column in referred_columns:
refspec.append(".".join([referred_table, column]))
if "options" in fkey_d: