2016-11-19 30 views
0

我必須連接到MySQL服務器,並抓住一些數據永遠連接到MySQL在一個循環

,所以我有兩個辦法

1)連接到MySQL在一段時間

conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True) 
cursor = conn.cursor(buffered=True) 
while True: 
    cursor.execute("statments") 
    sqlData = cursor.fetchone() 
    print(sqlData) 
    sleep(0.5) 
搶數據

這個工作不錯,但如果劇本墜毀由於MySQL連接問題腳本下山

2)連接到MySQL的同時

while True: 
    try: 
     conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True) 
     cursor = conn.cursor(buffered=True) 
     cursor.execute("statments") 
     sqlData = cursor.fetchone() 
     print(sqlData) 
     cursor.close() 
     conn.close() 
     sleep(0.5) 
    except: 
     print("recoverable error..") 

兩個代碼工作不錯,但我的問題是,這是更好?

回答

0

其中兩個更好的辦法將是使用單個連接,但創建一個新的光標爲每個語句,因爲新的連接的建立需要時間,但創建一個新的光標速度快。

conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True) 
while True: 
    try: 
     cursor = conn.cursor(buffered=True) 
     cursor.execute("statments") 
     sqlData = cursor.fetchone() 
     print(sqlData) 
    except Exception: # Catch exception which will be raise in connection loss 

     conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True) 
     cursor = conn.cursor(buffered=True) 

    finally: 
     cursor.close() 

conn.close() # Close the connection 

關於try:finally塊的使用還可以閱讀Defining Clean-up Actions:正如你可以更新的代碼。

+0

不錯,但我可以爲連接的損失怎麼辦?例如高負載的mysql崩潰,你的代碼不會開始工作後,MySQL恢復正常,因爲連接離開! –

+0

如果有高負載,即使創建新的連接也不起作用。你的整個應用程序將停止運行。不是嗎?在第二個代碼 –

+0

我可以忽略與嘗試......除了和MySQL服務器後重新聯機,它會嘗試重新連接很容易,但第一個代碼或您的代碼不能忽略錯誤的錯誤...... –