web-dev-qa-db-ja.com

SQLAlchemy-テーブルのリストを取得する

ドキュメントでこれに関する情報を見つけることができませんでしたが、SQLAlchemyで作成されたテーブルのリストを取得するにはどうすればよいですか?

クラスメソッドを使用してテーブルを作成しました。

81
sidewinder

すべてのテーブルは、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()

54
Zubair Alam
from sqlalchemy import create_engine
engine = create_engine('postgresql://use:pass@localhost/DBname')
print (engine.table_names())
25
Maeda

私はこのようなものを探していました:

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')
12
jmunsch

テーブルを作成したメタデータオブジェクトは、辞書にあります。

metadata.tables.keys()
4
Keith

私は同じ問題を解決していますが、この投稿を見つけました。いくつかの試行を実行した後、以下を使用してすべてのテーブルをリストすることをお勧めします:(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」は、テーブル名とテーブルオブジェクトの辞書を提供します。これは、迅速なクエリにも役立ちます。

3
user2189731

pythonインタープリター内でdb.engine.table_names()を使用

$ python
>>> from myapp import db
>>> db.engine.table_names()
3
Mwirabua Tim

すべてのテーブルを一度に反映すると、非表示のテーブル名も取得できます。一時テーブルをいくつか作成しましたが、

meta = MetaData()
meta.reflect(bind=myengine)
for table in reversed(meta.sorted_tables):
    print table

リファレンス http://docs.sqlalchemy.org/en/latest/core/reflection.html

2
zerocog