我正在寫一個查詢數據庫結果的小程序(單個表)。我使用python 3.3,sqlalchemy和postgres數據庫。從數據庫中逐一獲取結果
result = db_session.query(Data).all()
progress = 0
for row in result:
update_progress_bar(progress, len(result))
do_something_with_data(row)
progress += 1
變量'result'將包含數千行,並且處理數據需要一些時間。這就是爲什麼我介紹了一個簡單的進度條,以瞭解它將花費多少時間。 問題是,總時間的30%是對數據庫進行排隊(第一行)。所以當我開始程序時,我的進度條開始移動之前會有很大的延遲。另外,我不需要在記憶中保留所有結果。我可以分別處理它們。
有沒有什麼辦法可以修改上面的程序來逐個獲取行,直到接收到所有行,而不需要將所有內容都加載到內存中?另外我想監視查詢和處理數據的進度。
感謝EOL消解,我看看「流式結果」。爲了讓它起作用,我必須使用「.execution_options(stream_results = True)」運行查詢。我還發現我的數據庫適配器(pypostgresql)不支持流式傳輸。唯一能夠做到這一點的是psycop2。幸運的是,新的psycop2 2.5現在支持python 3.3 :)我將測試並分享經驗:) – Marek 2013-04-11 12:47:47