Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса [RSS Feed]

#1 Окт. 30, 2008 13:16:01

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса

Всем привет,
есть готовый скрипт, который запускает 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 запроса?



Офлайн

#2 Окт. 30, 2008 14:53:39

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса

Если модуль реализован правильно в соответствии с требованиями DB API 2, то да.



Офлайн

#3 Окт. 30, 2008 17:48:09

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса

Некоторые модули баз данных выдают по этому:

import your_sql_module
print your_sql_module.apilevel
релизацию DB API
P.S. Но можно и всегда проверить вручную поведение модуля, создав намеренно ошибочную ситуацию
c2.execute('bla bla bla')



Отредактировано (Окт. 30, 2008 17:50:57)

Офлайн

#4 Окт. 31, 2008 15:39:57

timas
От:
Зарегистрирован: 2008-08-28
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса

Как минимум, если запихнуть ошибочный запрос в 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



Отредактировано (Окт. 31, 2008 15:52:28)

Офлайн

#5 Окт. 31, 2008 16:05:42

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса

timas
Как минимум, если запихнуть ошибочный запрос в try, то в except можно вывести через sys.exc_info()
Зачем sys.exc_info()? В except можно и без этого получить объект исключения, содержащий информацию об ошибке.
timas
Вот только в качестве типа исключения выдает ProgrammingError
Все верно. Любой модуль претендующий на соответствие db api 2 должен генерить в этом случае ProgrammingError.



Офлайн

#6 Окт. 31, 2008 16:18:14

timas
От:
Зарегистрирован: 2008-08-28
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса

Просто я нуб еще. Подскажи как, а то я не нашел другого работающего способа.



Офлайн

#7 Окт. 31, 2008 17:30:03

vigorouz
От:
Зарегистрирован: 2008-05-19
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса

timas
Просто я нуб еще. Подскажи как, а то я не нашел другого работающего способа.
Можно, например, так:
...
try:
cx.execute('asdfasdf')
except MySQLdb.ProgrammingError, e:
print str(e)
...



Офлайн

#8 Окт. 31, 2008 20:21:20

timas
От:
Зарегистрирован: 2008-08-28
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса

Ясно, cпасибо. А как это вывести для стандартного исключения? А то сходу тяжело запомнить все типы исключений. Или все таки для каждого модуля dir-ом смотреть какие для него есть классы исключений.



Отредактировано (Окт. 31, 2008 20:28:46)

Офлайн

#9 Окт. 31, 2008 20:30:06

timas
От:
Зарегистрирован: 2008-08-28
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса

А все, разобрался. Че-то туплю сегодня…



Офлайн

#10 Апрель 9, 2010 11:23:33

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса

vigorouz
except MySQLdb.ProgrammingError, e:
Поясните пожалуйста что означает переменная e?
Как работает код - отлавливаются два исключения
MySQLdb.ProgrammingError или e
?
Или смысл другой?
P.S. извините за тупой вопрос



Офлайн

  • Начало
  • » GUI
  • » Всегда ли питон знает об ошибке возникшей при выполнении SQL запроса[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version