Как получать и проверять номер состояния, которые мы указываем в команде RAISEERROR в python?
Началось с того,что я реализовал все запросы 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, который не просто решать задачи на вычисления)