Найти - Пользователи
Полная версия: Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса
Начало » GUI » Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса
1 2
qman
Всем привет,
есть готовый скрипт, который запускает SQL запрос в командной строке для создания бакапа, с помошью osql.exe.
На текущий момент анализируется текст которые возвращает командна osql.exe, если отсутствует текса ‘BACKUP DATABASE.*seconds’
То принимается решение, что возникла ошибка.
Но хотелось бы узнать мнение, при отказе от использования утилиты osql.exe и переходе на использование модулей adodbapi или pyodbc возможно ли проконтролировать появление ошибок выполнения SQL запроса?
часть кода:
db2=adodbapi.connect(db_connection_str)
c2=db2.cursor()
c2.execute(SQLQuery)
c2.close()
или строка
c2.execute(SQLQuery)
Всегда ли питон будет знать об ошибке возникшей при выполнении SQL запроса?
slivlen
Если модуль реализован правильно в соответствии с требованиями DB API 2, то да.
igor.kaist
Некоторые модули баз данных выдают по этому:
import your_sql_module
print your_sql_module.apilevel
релизацию DB API
P.S. Но можно и всегда проверить вручную поведение модуля, создав намеренно ошибочную ситуацию
c2.execute('bla bla bla')
timas
Как минимум, если запихнуть ошибочный запрос в try, то в except можно вывести через sys.exc_info()
У меня например вывело это:
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.name FROM adminka_group t1, adminka_user_groups t2 WHERE t2.group_id=t1.id AND ' at line 1")
Вот только в качестве типа исключения выдает ProgrammingError
slivlen
timas
Как минимум, если запихнуть ошибочный запрос в try, то в except можно вывести через sys.exc_info()
Зачем sys.exc_info()? В except можно и без этого получить объект исключения, содержащий информацию об ошибке.
timas
Вот только в качестве типа исключения выдает ProgrammingError
Все верно. Любой модуль претендующий на соответствие db api 2 должен генерить в этом случае ProgrammingError.
timas
Просто я нуб еще. Подскажи как, а то я не нашел другого работающего способа.
vigorouz
timas
Просто я нуб еще. Подскажи как, а то я не нашел другого работающего способа.
Можно, например, так:
...
try:
cx.execute('asdfasdf')
except MySQLdb.ProgrammingError, e:
print str(e)
...
timas
Ясно, cпасибо. А как это вывести для стандартного исключения? А то сходу тяжело запомнить все типы исключений. Или все таки для каждого модуля dir-ом смотреть какие для него есть классы исключений.
timas
А все, разобрался. Че-то туплю сегодня…
qman
vigorouz
except MySQLdb.ProgrammingError, e:
Поясните пожалуйста что означает переменная e?
Как работает код - отлавливаются два исключения
MySQLdb.ProgrammingError или e
?
Или смысл другой?
P.S. извините за тупой вопрос
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB