2017-03-24 9 views
1

私はデータベースに存在する各テーブルのインスタンスを作成しようとするシンプルなSQLAlchemyのタスク、:SQLAlchemyの - ここで自動インスタンス化し、すべてのテーブル

from sqlalchemy import MetaData, create_engine, Table 
engine = create_engine("here my engine details...") 
metadata = MetaData() 

私はengine.table_names()を入力した場合、私はすべての私のテーブルの名前を見ることができます例えば、['indicators', 'prices', 'scripts']である。

私は通常、次のようにそれらのそれぞれのインスタンスを作成するに行くだろう:

scripts = Table('scripts', metadata, autoload = True, autoload_with=engine) 
indicators = Table('indicators', metadata, autoload = True, autoload_with=engine) 
prices = Table('prices', metadata, autoload = True, autoload_with=engine) 

しかし、明示的にそれらをコーディングすることなく、表のインスタンスを作成する方法はありますか?これを行う

tables = engine.table_names() 
for table in tables: 
    table = Table(table , metadata, autoload = True, autoload_with=engine) 

は明らかに動作しません。 ご意見はありがとうございます

+0

待ち時間、なぜ機能しないのですか?私はちょうどそれを試みたし、それは正常に動作するように見えます。 – bernie

+0

このようなテーブルのリストはどうですか: 'the_tables = [engine.table_names()のテーブルの[テーブル(テーブル、メタデータ、オートロード= True、autoload_with = engine)]' – bernie

+0

@bernieテーブルは文字列なので最後の行で変数名と実際の文字列の両方として使用することはできませんか? TBH私もそのことについてちょっと混乱しています... –

答えて

4

これだけでも可能です。あなたの辞書の要素にアクセスするテーブルのO(1) lookup取得辞書

my_tables = {table:Table(table,metadata,autoload=True,autoload_with=engine) 
      for table in engine.table_names()} 

:あなたは辞書がこれを行うことを好む場合

my_tables = [Table(table,metadata,autoload=True,autoload_with=engine) for 
      table in engine.table_names()] 

:このコードは、あなたのテーブルのリストを取得します

my_tables['indicators'] 
関連する問題