結果我有這樣迭代查詢從SQLAlchemy的
def foo():
local_session = Session()
results = local_session.query(T.x, T.y, T.z, T.a, T.b, T.c
, T.d, T.e, T.f, T.g, T.h, T.i, T.j, T.k, T.l
, T.m, T.n, T.o, T.p, T.q, T.r, T.s, T.t, T.u
, T.v,
User.gender).join(User)\
.filter(T.language == 'en', T.where_i_am_from == 'US',
User.some_num >= 0.9).limit(1000000)
local_session.close()
return results, results.count()
查詢一個SQLAlchemy的查詢功能工作正常。 然後我把這個功能在這裏:
def fubar():
raw_data,raw_data_length = myModule.foo()
df = pd.DataFrame()
for each in raw_data:
df = df.append(pd.DataFrame({ #add each.x etc to df..... }}
return df
的問題是,它不會在「爲每個raw_data」循環迭代的時候我有一個.limit我foo的查詢5000以上,或使用。所有( )或沒有限制。該程序將掛起並且什麼都不做(0 cpu使用)。我已經在我的本地sql服務器和我的亞馬遜測試過這兩個。當我直接在數據庫上運行SQL時,我返回了大約800,000行。這是爲什麼發生?
我正在使用最新的mysql和最新的sqlalchemy。
不是對你問題的回答,而是對問題的另一部分的評論:我不確定這是創建「DataFrame」的最佳方式。您可以嘗試使用'df = pd.read_sql(query.statement,query.session.bind)'來代替。 – van 2015-04-02 08:09:01
我會嘗試用下面的'rows = results.all()\ n local_session.close()\ n cnt = len(rows)\ n返回行,cnt'替換你的'return ...'語句。我的猜測是它與會話狀態有關。 – van 2015-04-02 08:09:57
謝謝。我會研究熊貓的方法。 – user2757902 2015-04-02 19:38:23