Проблема доступа к соединению MySQL из методов Flask - PullRequest
1 голос
/ 20 апреля 2019

Я разрабатываю приложение 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, оно отображается на терминале, но не обновляется в БД.
Спасибо.

1 Ответ

0 голосов
/ 20 апреля 2019

Вот как у меня это работает, используя пакет MySQLdb:

import MySQLdb

try:
    db = MySQLdb.connect("HOST", "USER", "PASS", "DB")
except:
    print("Problem creating DB connection")
    sys.exit()

cursor = db.cursor()

def storeDB(param_text1, param_text2, param_text3):
    query = """INSERT INTO `DB`.`TABLE` (`fullname`, `phone`, `email`) VALUES ('""" + \
        param_text1+"""','"""+param_text2+"""','"""+param_text3+"""');"""

    try:
        cursor.execute(query)
        db.commit()
        print('DB updated')
    except:
        db.rollback()
        print("Problem updating DB :(")
...