錯誤InterfaceError (0, '') 以及解決

最近在項目在使用peewee 的時候遇到該錯誤,於是上網搜了下對應的錯誤:

https://stackoverflow.com/questions/6650940/interfaceerror-0

都是說因爲關閉了連接對象然後繼續去操作數據庫。因爲peewe使用的是pymysql作爲連接,查看了一下源碼,做了個小實驗。

import pymysql.cursors

# Connect to the database
connection = pymysql.connect(host='ip',
                             user='username',
                             password='password',
                             db='database',
                             charset='utf8',
                             cursorclass=pymysql.cursors.DictCursor)
connection.close()
cursor = connection.cursor()
print cursor.execute("show master status;")
print cursor.fetchall()

從中可以看出,在操作數據庫過程中,如果連接對象被關閉,則會造成該錯誤。但是,在我查看代碼後,並沒有關閉連接對象的操作。一頓納悶後,發現了有個批量插入的操作,而mysql使用的還是默認配置。默認的參數max_allowed_packet 是4M,當客戶端對服務器傳輸的包超過這個值則會造成mysql gone away 的錯誤,所以在使用peewee 中的批量插入insert_many進行了,判斷,遇到該錯誤,則進行減半操作。但是這次錯遇到了這個連接關閉的錯誤,所以還是治本好,直接將該值設置1G,當然前提你的服務器,內存要足夠,不然也會造成服務器奔潰的現象。於是該問題久迎刃而解了。

關於max_allowed_packet的說明:https://dev.mysql.com/doc/refman/5.5/en/packet-too-large.html

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