Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 7, 2007 18:29:33

securelord
От:
Зарегистрирован: 2006-08-31
Сообщения: 129
Репутация: +  0  -
Профиль   Отправить e-mail  

Фильтрация ошибок в MySQLdb

Вопрос: есть ли какие то методы в MySQLdb, которые позволяют сделать, к примеру такое условие -


if (какой то запрос) завершился удачно (без ошибок и варнингов) то выполнить то-то

else
выполнить то-то
?



Офлайн

#2 Дек. 7, 2007 19:58:15

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

Фильтрация ошибок в MySQLdb

try:
conn = MySQLdb.connect(host, user, passwd, db)
cursor = conn.cursor()
cursor.execute(…
except MySQLdb.Error, e:
print “Error %d: %s” % (e.args, e.args)
sys.exit()
cursor.close()
conn.commit()
conn.close()



Отредактировано (Дек. 7, 2007 23:33:43)

Офлайн

#3 Дек. 10, 2007 12:01:58

dvs
От:
Зарегистрирован: 2006-05-22
Сообщения: 176
Репутация: +  3  -
Профиль   Отправить e-mail  

Фильтрация ошибок в MySQLdb

Ещё вариант вывода текста ошибки

from traceback import print_exc, format_exc
...
try:
    cur.execute(...)
except yourException, e:
    print_exc()  # и/или logging.error(format_exc()) #или logging.exception(e)



Отредактировано (Дек. 10, 2007 12:02:22)

Офлайн

#4 Дек. 10, 2007 21:17:58

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Фильтрация ошибок в MySQLdb

Можно ещё использовать Stored Procedures and Functions в самом MySQL

Офлайн

#5 Дек. 13, 2007 12:04:45

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Фильтрация ошибок в MySQLdb

А можно обычный sql:


CASE value WHEN THEN result [WHEN THEN result …] END
CASE WHEN THEN result [WHEN THEN result …] END
В первом варианте возвращается значение result, если value=compare-value. Во втором - результат для первого указанного условия condition, если оно истинно. Если соответствующая величина результата не определена, то возвращается значение result, указанное после оператора ELSE. Если часть ELSE в выражении отсутствует, возвращается NULL:

mysql> SELECT CASE 1 WHEN 1 THEN “one”
WHEN 2 THEN “two” ELSE “more” END;
-> “one”
mysql> SELECT CASE WHEN 1>0 THEN “true” ELSE “false” END;
-> “true”
mysql> SELECT CASE BINARY “B” WHEN “a” THEN 1 WHEN “b” THEN 2 END;
-> NULL



Офлайн

#6 Фев. 5, 2008 15:05:20

flashi4
От:
Зарегистрирован: 2008-01-16
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

Фильтрация ошибок в MySQLdb

У меня по этой теме думаю вопрос ко всем, кто знает.

вот КОД:

def save_acc(self):
record = model.Record()
record.user = request.params
record.password = request.params
record.flush()
h.redirect_to(action='saved_acc')


он добавляет в базу моих пользователей с паролем.

Вот моя модель :
КОД:

meta = MetaData()

records_table = Table('records', meta,
Column('id', Integer,primary_key=True),
Column('user', String(40), unique=True),
Column('password', String(40)),
)

class Record(object):
def __str__(self):
return self.title


Как вы заметили во втором Column'e поле user уникальное и при добавлении дубля в базу возникает ошибка…

<class ‘sqlalchemy.exceptions.SQLError’>: (IntegrityError) (1062, “Duplicate entry ‘1’ for key 2”) u'INSERT INTO records (user, password) VALUES (%s, %s)'


Кто знает как это можно убрать и сделать, чтобы при добавлении дубля в таблицу выдавалось сообщение, что “такой пользователь уже существует.”

Подскажите ПЛззз :)



Офлайн

#7 Фев. 6, 2008 12:13:49

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Фильтрация ошибок в MySQLdb

Обвернуть место добавления пользователя в try …. except с обработкой ошибки.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version