我使用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(...):
我真的必須創建到同一數據庫的多個連接?
我不認爲我甚至需要那個。一個線程可以建立多個連接,每個連接都有自己的光標。當然,兩個線程可以各自擁有自己的連接。還是你建議兩個線程可以共享一個連接對象,但每個都有自己的光標? – Josh 2013-02-22 20:46:00
@Josh:是的,一個連接,兩個遊標。無論如何,它爲我工作。由於GIL的原因,線程並沒有給CPython帶來併發性,但似乎允許在本機SQL客戶端中使用多個遊標。 – steamer25 2013-02-22 22:32:10
那麼,我想我可以稱這是一個答案,然後,即使它不是我正在尋找的:) – Josh 2013-03-13 05:17:34