我使用python订阅一个主题,解析JSON并将它们存储在数据库中。我在与MySQL失去联系方面遇到了问题,因为它无法打开太长时间。我收到的消息在
之下_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away')
我设法通过增加超时来删除它,但这不是一个好的解决方案,因为我不知道系统需要多长时间才能等待消息。 是否有可能仅在收到消息时才能创建连接?
我试图将连接细节添加到消息中,然后关闭它但我仍然遇到同样的问题
def on_message(client, userdata, msg):
sql =""" INSERT INTO data(something)VALUES(%s)""" data =("某些值") 与db: 尝试: cursor.execute(SQL,数据) 除了MySQLdb.Error: db.ping(真) cursor.execute(SQL,数据) 除了: 打印("错误&#34) 打印(cursor._last_executed)
然后该变量在此函数外部不可见。这是什么最好的做法。
用于建立连接的代码部分是
import paho.mqtt.client as mqtt
import MySQLdb
import json
import time
#mysql config
try:
db = MySQLdb.connect(host="localhost", # your host
user="admin", # username
passwd="somepass", # password
db="mydb") # name of the database
except:
print("error")
所以如你所见,我在乞讨时创建了一个与mysql的连接,如果时间没有消息,那么定义的超时我的脚本就会停止工作。
答案 0 :(得分:1)
尝试:
cur = db.cursor()
try:
cur.execute(query, params)
except MySQLdb.Error:
db.ping(True)
cur.execute(query, params)
db.ping(True)
表示重新连接到DB是连接丢失了。您也可以在db.ping(True)
之后立即致电MySQLdb.connect
。但为了安全起见,我最好将execute()
打包到try
并在db.ping(True)
块中调用except
。