一、pymysql.err.InterfaceError: (0, '')錯誤導致原因
目前我這邊導致InterfaceError: (0, '')的原因是 沒有連接上數據庫就在進行數據插入操作;在此之前會報ERROR (2013, 'Lost connection to MySQL server during query')錯誤,即mysql連接丟失。
二、解決方法
2.1、python連接語句
conn= pymysql.connect(host='10.24.21.192', port=9009, user='root', passwd='123456', db='test')
2.2、pymysql自帶 ping函數,可以檢測連接是否還正,ping函數源碼(來自python包):
def ping(self, reconnect=True):
"""
Check if the server is alive.
:param reconnect: If the connection is closed, reconnect.
:raise Error: If the connection is closed and reconnect=False.
"""
if self._sock is None:
if reconnect:
self.connect()
reconnect = False
else:
raise err.Error("Already closed")
try:
self._execute_command(COMMAND.COM_PING, "")
self._read_ok_packet()
except Exception:
if reconnect:
self.connect()
self.ping(False)
else:
raise
2.3、問題解決
方法1:
import pymysql
conn= pymysql.connect(host='10.24.21.192', port=9009, user='root', passwd='123456', db='test')
def test_conn():
sql_i = "INSERT INTO test_1(request_date, id, msg, label) VALUES (%s,%s,%s,%s)"
vals = ('20200427', '566453015','您好,這有啥', 'label_ask')
#conn.close()
while True:
try:
with conn.cursor() as cursor: # 獲取遊標
cursor.execute(sql_i, vals)
conn.commit()
break
except pymysql.err.InterfaceError as e:
print(e, type(e))
conn.ping(True)
方法2:
import pymysql
conn= pymysql.connect(host='10.24.21.192', port=9009, user='root', passwd='123456', db='test')
def test_conn():
'''測試 '''
sql_i = "INSERT INTO test_1(request_date, id, msg, label) VALUES (%s,%s,%s,%s)"
vals = ('20200427', '566453015','您好,這有啥', 'label_ask')
conn.ping(True)
with conn.cursor() as cursor: # 獲取遊標
cursor.execute(sql_i, vals)
conn.commit()
參考網址:
https://www.cnblogs.com/wintest/p/12772670.html
https://www.cnblogs.com/aaronthon/p/10331415.html
https://blog.csdn.net/u013948858/article/details/88343426