Форум сайта python.su
Всем привет,
есть готовый скрипт, который запускает 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)
Офлайн
Если модуль реализован правильно в соответствии с требованиями DB API 2, то да.
Офлайн
Некоторые модули баз данных выдают по этому:
import your_sql_module
print your_sql_module.apilevel
Отредактировано (Окт. 30, 2008 17:50:57)
Офлайн
Как минимум, если запихнуть ошибочный запрос в 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")
Отредактировано (Окт. 31, 2008 15:52:28)
Офлайн
timasЗачем sys.exc_info()? В except можно и без этого получить объект исключения, содержащий информацию об ошибке.
Как минимум, если запихнуть ошибочный запрос в try, то в except можно вывести через sys.exc_info()
timasВсе верно. Любой модуль претендующий на соответствие db api 2 должен генерить в этом случае ProgrammingError.
Вот только в качестве типа исключения выдает ProgrammingError
Офлайн
Просто я нуб еще. Подскажи как, а то я не нашел другого работающего способа.
Офлайн
timasМожно, например, так:
Просто я нуб еще. Подскажи как, а то я не нашел другого работающего способа.
...
try:
cx.execute('asdfasdf')
except MySQLdb.ProgrammingError, e:
print str(e)
...
Офлайн
Ясно, cпасибо. А как это вывести для стандартного исключения? А то сходу тяжело запомнить все типы исключений. Или все таки для каждого модуля dir-ом смотреть какие для него есть классы исключений.
Отредактировано (Окт. 31, 2008 20:28:46)
Офлайн
А все, разобрался. Че-то туплю сегодня…
Офлайн
vigorouzПоясните пожалуйста что означает переменная e?
except MySQLdb.ProgrammingError, e:
Офлайн