Я разрабатываю приложение Flask с интеграциями MySQL (flask-mysqldb) и MQTT (flask-mqtt). Я могу выполнить любую операцию с БД из метода Flask (например, @app.route('/')
), но если я пытаюсь сделать это из метода MQTT, когда я получаю сообщение (например, @mqtt.on_message()
), он ничего не делает. Этот последний метод работает отлично, потому что он получает и показывает в журнале полученное сообщение.
У меня есть метод, который выполняет операции с БД, и в зависимости от того, откуда я его вызываю, работает он или нет. Я думаю, это должно быть из-за объекта MySQL, но я точно не знаю.
Вот код, который я использую (только проблема):
@mqtt.on_message()
def handle_mqtt_message(client, userdata, message):
print('New message {}'.format(message.payload.decode()))
storeDB('test') #Here it doesn't work
################## Methods ###########################
def storeDB(param_text):
cur = mysql.connection.cursor()
cur.execute(
'INSERT INTO contacts (fullname, phone, email) VALUES (%s,%s,%s)', (param_text, param_text, param_text))
mysql.connection.commit()
###################### FLASK #########################
@app.route('/')
def index():
storeDB('temp') #Here it works
return 'Hello World'
Если я получаю доступ к localhost
, в браузере отображается текст «Hello World» и обновляется БД; в противном случае, если я получаю сообщение MQTT, оно отображается на терминале, но не обновляется в БД.
Спасибо.