2016-09-21 7 views
1

私はSQLAlchemyのために完全に新たなんだ、と私はより良いpd.read_sqlを使用することができます方法を理解しようとしてきました。SQLAlchemyの/パンダ - どのように私はpd.read_sqlに渡すSQLAlchemyの `selectable`を作成するのですか?

私は正常に次のことを実行しました

import sqlalchemy as sa 
import pandas as pd 
df = pd.DataFrame(index=range(10,30), data=np.random.rand(20, 10)) 
eng = sa.create_engine('sqlite:///test.db') 
df.reset_index().to_sql('test_table', eng, index=False) 
df2 = pd.read_sql('test_table' , eng) # Don't understand this function 

私はちょうど私が望んでいた場合、私はpd.read_sqlの最初の引数としてテーブル名を渡すことにより、テーブルに保存されているものは何でもロードが、どのようなことができます考え出しました列indexが何らかの数より大きい要素だけをロードする。私は唯一のデータベース/テーブルのサブセットをロードするpd.read_sqlの最初の引数のためのSQLAlchemyのselectableを作成するにはどうすればよい

質問

コメント:私はDF2をロードしましたが、DBのサイズが非常に大きい場合、私はメモリ内全体デシベルをロードすることを避けるために希望した後、これを行うことは自明であることを知っている。この場合 最初。

+0

でしょうか? –

+1

あなたはチュートリアルの[選択](http://docs.sqlalchemy.org/en/latest/core/tutorial.html#selecting)セクションを読むことがありますか? – univerio

+0

@BobHaffner、なぜあなたはあなたの答えを削除しましたか?それは完全にこの質問に答える - そうではありませんか? – MaxU

答えて

0

3種類の方法でテーブルを取得します。 (違いが何であるかはわかりません)。

このテーブルの.select()メソッドを使用すると、その結果の.whereが必要なものを取得します。オプションとなるSQLを使用して

import sqlalchemy as sa 
eng = sa.create_engine('sqlite:///test.db') 
# First way to load table 
m = sa.MetaData() 
m.reflect(bind=eng) 
t1 = m.tables['test_table'] 

# Second way 
m2 = sa.MetaData(bind=eng) 
t2 = sa.Table('test_table', m2, autoload=True) 

# Third way 
t3 = sa.Table('test_table', sa.MetaData(), autoload_with=eng) 

# I can then use either of the t's to do the following 
df3 = pd.read_sql(t.select().where(t.c.index > 15), eng) 
+2

私はあなたの3番目の方法を働かせることができませんでした。また、潜在的な第4はSQLです。 'sql = 'select * from test_table where" index "> 15' df4 = pd.read_sql(sql、eng)' MetaDataやTableオブジェクトを必要とせず、データセットの方が高速です。途中で良いもの。私は選択可能なものについて知らなかった –

+0

今すぐ動作し、()を追加しましたが、それをテストしていません – evan54

関連する問題