--- /dev/null
+.. change::
+ :tags: ext, usecase
+ :tickets: 5942
+
+ Add new parameter
+ :paramref:`_automap.AutomapBase.prepare.reflection_options`
+ to allow passing of :meth:`_schema.MetaData.reflect` options like ``only``
+ or dialect-specific reflection options like ``oracle_resolve_synonyms``.
name_for_scalar_relationship=None,
name_for_collection_relationship=None,
generate_relationship=None,
+ reflection_options=util.EMPTY_DICT,
):
"""Extract mapped classes and relationships from the
:class:`_schema.MetaData` and
.. versionadded:: 1.1
+ :param reflection_options: When present, this dictionary of options
+ will be passed to :meth:`_schema.MetaData.reflect`
+ to supply general reflection-specific options like ``only`` and/or
+ dialect-specific options like ``oracle_resolve_synonyms``.
+
+ .. versionadded:: 1.4
+
"""
glbls = globals()
if classname_for_table is None:
autoload_with = engine
if reflect:
- cls.metadata.reflect(
- autoload_with,
+ opts = dict(
schema=schema,
extend_existing=True,
autoload_replace=False,
)
+ if reflection_options:
+ opts.update(reflection_options)
+ cls.metadata.reflect(autoload_with, **opts)
with _CONFIGURE_MUTEX:
table_to_map_config = dict(
u1 = User(name="u1", addresses_collection=set([a1]))
assert a1.user is u1
+ def test_prepare_w_only(self):
+ Base = automap_base()
+
+ Base.prepare(
+ testing.db,
+ reflection_options={"only": ["users"], "resolve_fks": False},
+ )
+ assert hasattr(Base.classes, "users")
+ assert not hasattr(Base.classes, "addresses")
+
def test_exception_prepare_not_called(self):
Base = automap_base(metadata=self.tables_test_metadata)
autoload_replace=False,
)
+ def test_prepare_w_dialect_kwargs(self):
+ Base = automap_base(metadata=self.tables_test_metadata)
+ engine_mock = Mock()
+ with patch.object(Base.metadata, "reflect") as reflect_mock:
+ Base.prepare(
+ autoload_with=engine_mock,
+ reflection_options={"oracle_resolve_synonyms": True},
+ )
+ reflect_mock.assert_called_once_with(
+ engine_mock,
+ schema=None,
+ extend_existing=True,
+ autoload_replace=False,
+ oracle_resolve_synonyms=True,
+ )
+
def test_naming_schemes(self):
Base = automap_base(metadata=self.tables_test_metadata)