2013-10-06 162 views
3

我已經記錄下在主場以MySQL數據庫(閱讀每5分鐘共10個傳感器),並一直在使用Python,但我想知道的東西...MySQL,我應該在需要時保持連接或連接嗎?

目前,當我第一次運行我的程序,我運行正常連接到MySQL,它只運行一次。

db = MySQLdb.connect(mysql_server, mysql_username, mysql_passwd, mysql_db) 
cursor = db.cursor() 

然後我收集數據併成功發佈到數據庫。腳本然後休眠5分鐘,然後重新開始並收集並再次發佈數據等。但是,我只連接一次,而且我從未斷開連接;它只是繼續循環。如果我終止程序,我只會斷開連接。

這是最好的做法呢?也就是說,將連接始終打開到MySQL服務器,還是應該在完成插入/提交後斷開連接?

我之所以問:每一個現在,然後,我必須重新啓動腳本,因爲也許我的MySQL服務器脫機或去其他一些問題。我應該:

  • 繼續做我在做什麼,只是處理任何MySQL數據庫斷開與重新連接,
  • 把它放在crontab來收集數據,每隔五分鐘,沒有循環,沒有睡覺,或
  • 還有別的嗎?
+1

我真的不知道你問這裏有什麼... –

+0

希望的措詞有所幫助! –

回答

4

MySQL的服務器被配置爲處理連接的固定數量有限。綁定不經常使用的連接並不是一個好習慣。所以通常情況下,您應該儘快關閉連接,並在需要時重新連接。 MySQLdb的連接是上下文管理器,因此您可以使用with-statement語法來自動關閉連接。

connection = MySQLdb.connect(
    host=config.HOST, user=config.USER, 
    passwd=config.PASS, db=config.MYDB,) 
with connection as cursor: 
    print(cursor) 
    # the connection is closed for you automatically 
    # when Python leaves the `with-suite`. 

健壯性,您可能需要使用try..except處理的情況下(甚至在第一次運行)connect無法建立連接。

說了這麼多,我只想把它放在一個crontab條目,並免除睡覺。

+0

謝謝,我有嘗試...除了它大氣壓,但不知道是否循環,這不是一個正常的做法。會改變它。並感謝一開始的一些建議。 –