заманивание в ловушку предупреждения MySql

В моем сценарии питона я хотел бы заманить в ловушку «Данные, усеченные для колонки '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
36
задан Abruzzo Forte e Gentile 20 January 2010 в 14:59
поделиться

4 ответа

Предупреждения только что: предупреждения. Они сообщаются (обычно) STDERR, но больше ничего не сделано. Вы не можете поймать их как исключения, потому что они не поднимаются.

Вы можете, однако, настроить то, что к сделать с предупреждениями, и выключите их или превратить их в исключения, используя модуль . Например, предупреждения. Pilterwarnings («Ошибка», категория = MySQLDB.Warning) , чтобы повернуть MySQLDB.Warning Предупреждения в исключениях (в этом случае они будут пойманы, используя вашу попытку / кроме ) или «игнорировать» , чтобы не показывать их вообще. Вы можете (и, вероятно, следует) иметь более мелкозернистые фильтры, чем просто категория.

47
ответ дан 27 November 2019 в 05:39
поделиться

Я бы попробовал сначала установить SQL_MODE . Вы можете сделать это на уровне сеанса. Если вы выполняете:

SET @@sql_mode:=TRADITIONAL;

(вы также можете установить его на уровне сервера, но вам нужен доступ к серверу, чтобы сделать это. И, что настроить все еще переопределен на уровне сеанса, поэтому нижняя строка - всегда Установите его на уровне сеанса, сразу после установления соединения)

Тогда многие вещи, которые обычно предупреждают, становятся ошибками. Я не знаю, как эти проявляются на уровне Python, но четкое преимущество состоит в том, что изменения не хранятся в базе данных. См.: http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode.traditional

5
ответ дан 27 November 2019 в 05:39
поделиться

Остановите использование MySQLDB. Он имеет такое глупое поведение в качестве усечения данных и выдача только предупреждения. Используйте Oursql вместо этого.

2
ответ дан 27 November 2019 в 05:39
поделиться

Вы пытались использовать команду Show warnings mysql ?

2
ответ дан 27 November 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: