2011-04-06 34 views
8

我使用pyodbc Python的2.6連接到Microsoft SQL Server 2005中我打開一個連接,創建兩個光標:我可以在pyodbc和MS SQL Server的一個連接上使用多個遊標嗎?

c1 = connection.cursor() 
c2 = connection.cursor() 

,然後運行第一光標查詢。

c1.execute("select * from foo") 

現在我跑在第二光標的查詢:

c2.execute("select * from bar") 

...我得到一個錯誤:「連接是忙於結果另一個hstmt。」

在我做了c1.fetchall()c1.close()後,我可以使用c2。

我的問題是:爲什麼我甚至允許在連接上創建多個遊標,如果我一次只允許使用一個遊標,並且同一個遊標始終可以重用?而且,如果我想運行另一個查詢結果的每一行的查詢,如:

for x in c1.execute(...): 
    for y in c2.execute(...): 

我真的必須創建到同一數據庫的多個連接?

回答

0
+0

我不認爲我甚至需要那個。一個線程可以建立多個連接,每個連接都有自己的光標。當然,兩個線程可以各自擁有自己的連接。還是你建議兩個線程可以共享一個連接對象,但每個都有自己的光標? – Josh 2013-02-22 20:46:00

+0

@Josh:是的,一個連接,兩個遊標。無論如何,它爲我工作。由於GIL的原因,線程並沒有給CPython帶來併發性,但似乎允許在本機SQL客戶端中使用多個遊標。 – steamer25 2013-02-22 22:32:10

+0

那麼,我想我可以稱這是一個答案,然後,即使它不是我正在尋找的:) – Josh 2013-03-13 05:17:34

-1

我自己的做法我從來沒有滿足使用多個數據庫遊標的必要性。這些問題已經被複雜的SQL查詢(連接,組)所解決。或者(如果你可以忽略性能問題)通過使用幾個簡單的查詢。

+1

當我編寫自定義遷移腳本採取從設計很差,記錄不完整系統到新系統的數據,我經常需要幾個光標在兩個數據庫開放。 – 2013-10-29 06:17:29

相關問題