すべてのテーブルはtables
に収集されます SQLAlchemyMetaDataオブジェクトの属性。これらのテーブルの名前のリストを取得するには:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
宣言型拡張機能を使用している場合は、メタデータを自分で管理していない可能性があります。幸い、メタデータはまだベースクラスに存在しています。
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
データベースにどのテーブルが存在するかを把握しようとしている場合は、SQLAlchemyにまだ通知していないテーブルの中でも、テーブルリフレクションを使用できます。次に、SQLAlchemyはデータベースを検査し、欠落しているすべてのテーブルでメタデータを更新します。
>>> metadata.reflect(engine)
Postgresの場合、複数のスキーマがある場合は、エンジン内のすべてのスキーマをループする必要があります。
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)