python版本mysql connctor使用問題一例:不能獲取到新數據

sql='select * from tb1'

self.cursor.execute(sql)

 rows=self.cursor.fetchall() 

time.sleep(30)

self.cursor.execute(sql)

 rows=self.cursor.fetchall() 

time.sleep(30)


self.cursor.execute(sql)

 rows=self.cursor.fetchall() 

time.sleep(30)


在上面的代碼中,使用了同一個conn來執行同一個sql,每次執行間隔了30秒。這段代碼如果換成其他語言是不會有問題的,但是在這裏有問題

connector中對於同一個conn連接執行同一個sql的話,會自動緩存行爲,也就是說第一次執行返回的是啥結果,後面兩次也依然是啥結果,不論在sleep 30秒的過程中數據庫中的數據是否發生了變化

(中間如果嵌套一個update好像結果也是一樣的,好像只是select 變化了後續纔會變化)

如果sql不一樣的話,這個返回結果會發生改變。

另外一點也需要注意:同一個連接中對於一個select 模式execute,如果沒有fetch,那麼後續的select execute 也會無意義

官方文檔的原話是:Note that you have to fetch all rows before being able to execute new queries using the same connection.

tmd,這句話也太容易被忽視了吧!!!

這種看似優化的行爲擺明了是connector在自以爲是!!!你妹的妹!

這個小小的問題讓我今天測試了無數遍!

改進的建議是:不要使用長連接,使用完了馬上就關閉!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章