Wszystkie tabele są zebrane w tables
atrybut obiektu SQLAlchemy MetaData. Aby uzyskać listę nazw tych tabel:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
Jeśli używasz rozszerzenia deklaratywnego, prawdopodobnie sam nie zarządzasz metadanymi. Na szczęście metadane są nadal obecne w klasie bazowej,
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
Jeśli próbujesz dowiedzieć się, jakie tabele znajdują się w Twojej bazie danych, nawet wśród tych, o których jeszcze nawet nie powiedziałeś SQLAlchemy, możesz użyć odbicia tabel. SQLAlchemy sprawdzi następnie bazę danych i zaktualizuje metadane o wszystkie brakujące tabele.
>>> metadata.reflect(engine)
W przypadku Postgresa, jeśli masz wiele schematów, musisz przejść przez wszystkie schematy w silniku:
from sqlalchemy import inspect
inspector = inspect(engine)
schemas = inspector.get_schema_names()
for schema in schemas:
print("schema: %s" % schema)
for table_name in inspector.get_table_names(schema=schema):
for column in inspector.get_columns(table_name, schema=schema):
print("Column: %s" % column)