Как получать и проверять номер состояния, которые мы указываем в команде RAISEERROR в python?

Рейтинг: 0Ответов: 0Опубликовано: 06.06.2023

Началось с того,что я реализовал все запросы sql через курсор в функциях python и вызывал их соответственно.
Потом мне сказали, что хранимые процедуры и функции и т.п. лучше обрабатывать в ms sql, и вызывать их просто в python, я так и сделал, но если допустим, я делаю несколько RAISEERROR в sql, то я не понимаю как обрабатывать их в python, если ответ не выдаёт никакого состояния в консоли(например: состояние 1 обрабатывать так,а состояние 2 обрабатывать так).

Рандомный пример с raiseerror'ами на sql:

CREATE PROCEDURE [dbo].[get_user]
(
    @str nvarchar(10)
)
AS
BEGIN
    SET NOCOUNT ON;

    IF @str = N'var1'
    BEGIN
        RAISERROR('ошибка 1 - %s' , 16, 1, @str) 
    END;
    IF @str = N'var2'
    BEGIN
        RAISERROR('ошибка 1 - %s' , 16, 2, @str) 
    END;
   SELECT * FROM users WHERE users.local_username = @str
END

Функция на python:

def get_user(local_user) -> list:
    cursor = Database().cursor
    cursor.execute(f"EXEC get_user N'{local_user}'")
    res = cursor.fetchall()
    cursor.close()
    return res

Думал просто проверять текст ошибки, но даже до текста ошибки нельзя добраться(пробовал cursor.fetchone())
Вызов функций соответственно:

    try:
        print(get_user('var1'))
        print(get_user('var2'))
    except ProgrammingError as PR:
        #тут должна быть обработка разных ошибок
        pass

Вывод ошибки без блока try-except:

pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]ошибка 1 - var1 (50000) (SQLExecDirectW)')

Возможно я не знаю каких то особенностей ошибок в python или sql(мой первый проект на python с sql, который не просто решать задачи на вычисления)

Ответы

Ответов пока нет.