Команда вставки не вставляет или выдает ошибку, возвращает @@ IDENTITY - PullRequest
0 голосов
/ 02 февраля 2020

Я выполняю хранимую процедуру, чтобы вставить новую строку в таблицу и вернуть автоматически сгенерированный идентификатор. Тем не менее, он не вставляет строку, но правильно отвечает с идентификатором при вызове из Python. (Например, он возвращает 9, но при поиске в БД, где нет нового сообщения)

Запуск команды с использованием SQL Workbench работает как положено

Вызываемый SP - addNewMessage и ожидает 3 параметры (sUID, roomid, сообщение)

SQL команда (при запуске вручную)

CALL addNewMessage('bfc1cc8c-4462-11ea-887c-000d3a7f4c7f', '658946602274258955', 'My Message')

SQL SP

BEGIN
INSERT INTO `messages`(`server_uid`, `title`, `message`, `author`, `room_id`) VALUES (sUID,title,'','',room);
SELECT @@IDENTITY as newId;
END

Python Скрипты

new_message = mysql_command('discord_addNewMessage', ['bfc1cc8c-4462-11ea-887c-000d3a7f4c7f', '658946602274258955', 'My Message'])
print(new_message);
def mysql_command(command, args, addDataWrapper=False, decode=False):
    global sql_cursor
    try:
        if isinstance(args, list):
            sql_cursor.callproc(command, [arg for arg in args])            
        else:
            sql_cursor.callproc(command, [args])
        for result in sql_cursor.stored_results():
            return_data = result.fetchall()
            if decode:
                data = return_data[0][0].decode('utf-8')
            else:
                data = return_data[0][0]
            if addDataWrapper:
                data = '{"data":[' + data + ']}'
            return data
    except BaseException as ex:
        print("SQL Error :", ex)

1 Ответ

1 голос
/ 03 февраля 2020

После еще нескольких копаний мне нужно было зафиксировать использование mydb.commit() после sql_cursor.callproc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...