0
這是複製的樣本:Python的MySQL的執行查詢循環用光標接近
import mysql.connector
conn = mysql.connector.connect(
user='root', password='12347',
host='localhost')
def getCursor():
return conn.cursor()
def execQuery(cursor=getCursor()):
cursor.execute("SELECT 2")
cursor.fetchall()
cursor.close()
for i in range(4):
cursor = execQuery()
此代碼的工作,而不cursor.close()
。但我覺得奇怪的是,這個樣本與cursor.close作品甚至()用一個簡單的變化:
def execQuery():
cursor=getCursor()
cursor.execute("SELECT 2")
cursor.fetchall()
cursor.close()
由默認參數移動到函數體。
我不知道是否關閉遊標是最佳做法,所以我可以跳過關閉遊標,同時保持第一種形式。如果不是使用函數的返回值的默認參數的最佳做法,我可以使用第二種形式。 但我想,爲什麼他們採取不同的
這就像我有同樣的錯誤,如下所示:
cursor.execute("SELECT 2")
cursor.fetchall()
cursor.close()
cursor.execute("SELECT 2")
這就像使用ExecQuery的每個呼叫使用相同的光標,所以它被封鎖在第二個電話會議上。
感謝您的回答。我認爲'創建光標所有時間的函數...'應該是'光標*每次*',否? – user3290525
無論如何,從我的理解你的答案,每次'execQuery'在循環中被調用,它創建光標。然後你說我關閉了光標而不是再次創建它。你是說第二次執行'execQuery'時,遊標不會被創建,因爲它被關閉了嗎?你能告訴我爲什麼它不再被創建嗎? – user3290525