В моем сценарии питона я хотел бы заманить в ловушку «Данные, усеченные для колонки 'xxx'» предупреждение во время моего использования вопроса MySql.
Я видел, что некоторые посты предложили кодекс ниже, но это doesn' работа.
Вы знаете, должен ли некоторый определенный модуль быть импортирован или если некоторый выбор/флаг нужно назвать перед использованием этого кодекса?
Спасибо все
Afeg
import MySQLdb
try:
cursor.execute(some_statement)
# code steps always here: No Warning is trapped
# by the code below
except MySQLdb.Warning, e:
# handle warnings, if the cursor you're using raises them
except Warning, e:
# handle warnings, if the cursor you're using raises them
Предупреждения только что: предупреждения. Они сообщаются (обычно) STDERR, но больше ничего не сделано. Вы не можете поймать их как исключения, потому что они не поднимаются.
Вы можете, однако, настроить то, что к сделать с предупреждениями, и выключите их или превратить их в исключения, используя модуль
. Например, предупреждения. Pilterwarnings («Ошибка», категория = MySQLDB.Warning)
, чтобы повернуть MySQLDB.Warning Предупреждения
в исключениях (в этом случае они будут пойманы, используя вашу попытку / кроме ) или «игнорировать»
, чтобы не показывать их вообще. Вы можете (и, вероятно, следует) иметь более мелкозернистые фильтры, чем просто категория.
Я бы попробовал сначала установить SQL_MODE
. Вы можете сделать это на уровне сеанса. Если вы выполняете:
SET @@sql_mode:=TRADITIONAL;
(вы также можете установить его на уровне сервера, но вам нужен доступ к серверу, чтобы сделать это. И, что настроить все еще переопределен на уровне сеанса, поэтому нижняя строка - всегда Установите его на уровне сеанса, сразу после установления соединения)
Тогда многие вещи, которые обычно предупреждают, становятся ошибками. Я не знаю, как эти проявляются на уровне Python, но четкое преимущество состоит в том, что изменения не хранятся в базе данных. См.: http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode.traditional
Остановите использование MySQLDB. Он имеет такое глупое поведение в качестве усечения данных и выдача только предупреждения. Используйте Oursql вместо этого.