ドキュメントでこれに関する情報を見つけることができませんでしたが、SQLAlchemyで作成されたテーブルのリストを取得するにはどうすればよいですか?
クラスメソッドを使用してテーブルを作成しました。
すべてのテーブルは、SQLAlchemy MetaDataオブジェクトのtables
属性に収集されます。それらのテーブルの名前のリストを取得するには:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
宣言型拡張機能を使用している場合、おそらく自分でメタデータを管理しているわけではありません。幸いなことに、メタデータはまだベースクラスに存在しますが、
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
まだSQLAlchemyに通知していなくても、データベースに存在するテーブルを把握しようとしている場合は、テーブルリフレクションを使用できます。 SQLAlchemyはデータベースを検査し、不足しているすべてのテーブルでメタデータを更新します。
>>> metadata.reflect(engine)
engine
オブジェクトには、テーブル名のリストを取得するメソッドがあります。 engine.table_names()
from sqlalchemy import create_engine
engine = create_engine('postgresql://use:pass@localhost/DBname')
print (engine.table_names())
私はこのようなものを探していました:
from sqlalchemy import create_engine
eng = create_engine('mysql+pymysql://root:password@localhost:3306', pool_recycle=3600)
q = eng.execute('SHOW TABLES')
available_tables = q.fetchall()
実行を実行し、すべてのテーブルを返します。
更新:
Postgres:
eng = create_engine('postgresql+psycopg2://root:password@localhost/
q = eng.execute('SELECT * FROM pg_catalog.pg_tables')
テーブルを作成したメタデータオブジェクトは、辞書にあります。
metadata.tables.keys()
私は同じ問題を解決していますが、この投稿を見つけました。いくつかの試行を実行した後、以下を使用してすべてのテーブルをリストすることをお勧めします:(zerocogによる言及)
metadata = MetaData()
metadata.reflect(bind=engine)
for table in metadata.sorted_tables:
print(table)
これは、テーブルを直接処理するのに便利で、お勧めだと感じています。
そして、以下のコードを使用してテーブル名を取得します。
for table_name in engine.table_names():
print(table_name)
「metadata.tables」は、テーブル名とテーブルオブジェクトの辞書を提供します。これは、迅速なクエリにも役立ちます。
pythonインタープリター内でdb.engine.table_names()を使用
$ python
>>> from myapp import db
>>> db.engine.table_names()
すべてのテーブルを一度に反映すると、非表示のテーブル名も取得できます。一時テーブルをいくつか作成しましたが、
meta = MetaData()
meta.reflect(bind=myengine)
for table in reversed(meta.sorted_tables):
print table
リファレンス http://docs.sqlalchemy.org/en/latest/core/reflection.html