diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-02-28 10:59:41 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-02-28 13:49:09 -0500 |
| commit | a690ec082451ca0636fb45a0d9773a240ae30373 (patch) | |
| tree | 427ce67495efa3447dd4326448b4a93158826a0c /lib/sqlalchemy/engine/reflection.py | |
| parent | 358a0dcf10c27b3f209ac887be9960eccd588a7d (diff) | |
| download | sqlalchemy-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.py | 47 |
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: |
