2014-07-24 46 views
0

我在這裏看到了一些答案,在每個查詢之前打開一個新的MySQL遊標,然後關閉它。是否爲每個查詢打開一個新的MySQL遊標緩慢?

這樣慢嗎?我不應該通過傳遞參數來回收遊標嗎?

我有一個無限循環的程序,所以最終連接將在默認的8小時後超時。

編輯:

按照要求,這是處理SQL查詢的相關代碼:

def fetch_data(query): 
    try: 
     cursor = db.Cursor() 
     cursor.execute(query) 
     return cursor.fetchall() 
    except OperationalError as e: 
     db = fetchDb() 
     db.autocommit(True) 
     print 'reconnecting and trying again...' 
     return fetch_data(query) 
+0

您應該將當前功能標識爲配置文件的瓶頸。還有一個類似於你自己的問題:http://stackoverflow.com/questions/8099902/should-i-reuse-the-cursor-in-the-python-mysqldb-module –

+0

@ hd1誰說的基本功能沒有完成?它完成了,我只是修復了第一個10k-20k迭代之後發生的錯誤,而且它依賴於這個問題。 – User

+0

發佈您的代碼,@macdonjo,請...我會看看 – hd1

回答

1

當然,重新連接的連接數千年的時間將花費更多的時間。您最好將其設置爲您班級的一個屬性,如下所示:

class yourClass(): 
    self.db = ... 
    self.cursor = self.con.Cursor() 

    # do something 
    def fetch_data(self, query): 
     try: 
      if self.cursor: 
       self.cursor.execute(query) 
      else: 
       raise OperationalError 
      return self.cursor.fetchall() 
     except OperationalError as e: 
      self.db = fetchDb() 
      self.db.autocommit(True) 
      print 'reconnecting and trying again...' 
      return fetch_data(query)