- the logging message emitted by the engine when
a connection is first used is now "BEGIN (implicit)"
to emphasize that DBAPI has no explicit begin().
-
+
+ - added "views=True" option to metadata.reflect(),
+ will add the list of available views to those
+ being reflected. [ticket:1936]
+
- informix
- *Major* cleanup / modernization of the Informix
dialect for 0.6, courtesy Florian Apolloner.
from sqlalchemy.sql.util import sort_tables
return sort_tables(self.tables.itervalues())
- def reflect(self, bind=None, schema=None, only=None):
+ def reflect(self, bind=None, schema=None, views=False, only=None):
"""Load all available table definitions from the database.
Automatically creates ``Table`` entries in this ``MetaData`` for any
:param schema:
Optional, query and reflect tables from an alterate schema.
-
+
+ :param views:
+ If True, also reflect views.
+
:param only:
Optional. Load only a sub-set of available named tables. May be
specified as a sequence of names or a callable.
available = util.OrderedSet(bind.engine.table_names(schema,
connection=conn))
+ if views:
+ available.update(
+ bind.dialect.get_view_names(conn or bind, schema)
+ )
+
current = set(self.tables.iterkeys())
if only is None:
finally:
m1.drop_all()
+ @testing.provide_metadata
def test_views(self):
- meta = MetaData(testing.db)
- users, addresses = createTables(meta, None)
- meta.create_all()
- createViews(meta.bind, None)
+ users, addresses = createTables(metadata, None)
try:
+ metadata.create_all()
+ createViews(metadata.bind, None)
m2 = MetaData(testing.db)
users_v = Table("users_v", m2, autoload=True)
addresses_v = Table("email_addresses_v", m2, autoload=True)
-
+
for c1, c2 in zip(users.c, users_v.c):
eq_(c1.name, c2.name)
self.assert_types_base(c1, c2)
-
+
for c1, c2 in zip(addresses.c, addresses_v.c):
eq_(c1.name, c2.name)
self.assert_types_base(c1, c2)
+ finally:
+ dropViews(metadata.bind)
+
+ @testing.provide_metadata
+ def test_reflect_all_with_views(self):
+ users, addresses = createTables(metadata, None)
+ try:
+ metadata.create_all()
+ createViews(metadata.bind, None)
+ m2 = MetaData(testing.db)
+
+ m2.reflect(views=False)
+ eq_(
+ set(m2.tables),
+ set([u'users', u'email_addresses'])
+ )
+ m2 = MetaData(testing.db)
+ m2.reflect(views=True)
+ eq_(
+ set(m2.tables),
+ set([u'email_addresses_v', u'users_v',
+ u'users', u'email_addresses'])
+ )
finally:
- dropViews(meta.bind, None)
- meta.drop_all()
-
+ dropViews(metadata.bind)
+
class CreateDropTest(TestBase):
@classmethod