我一直在使用python與RDBMS'(MySQL和PostgreSQL),我注意到我真的不明白如何使用遊標。Python的DB-API中的遊標如何工作?
通常情況下,一個有他的劇本通過客戶端DB-API連接到數據庫(如psycopg2或MySQLdb的):
connection = psycopg2.connect(host='otherhost', etc)
然後一個創建一個光標:
cursor = connection.cursor()
然後可以發出查詢和命令:
cursor.execute("SELECT * FROM etc")
現在查詢的結果在哪裏,我想知道?它在服務器上嗎?或者我的客戶端上有一點,我的服務器上有一點?然後,如果我們需要訪問一些成果,我們取「時間:
rows = cursor.fetchone()
或
rows = cursor.fetchmany()
現在讓我們說,我不檢索所有的行,並決定執行另一個查詢,先前的結果會發生什麼?他們是一個開銷。另外,我應該爲每種形式的命令創建一個遊標,並以某種方式不斷地重複使用它作爲這些相同的命令;我頭psycopg2可以以某種方式優化多次執行但具有不同值的命令,如何以及是否值得?
THX
Re:關於遊標的最佳實踐,來自FAQ(http://initd.org/psycopg/docs/faq.html):「我們的建議是幾乎總是創建一個新的遊標,並儘快處理舊遊標數據不再是必需的(對它們調用close())。唯一的例外是緊密循環,其中一個通常使用相同的遊標來處理大量的INSERT或UPDATE。 – 2013-06-13 12:15:35