Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 24, 2018 20:02:41

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

SQLAlchemy - показать лишь одну запись, на которой валится запрос?

Здравствуйте.
Интересная задача имеется: в автоматическом режиме собираются данные за несколько минут, а потом пачкой обрабатываются и вставляются в базу MySQL. Иногда количество записей может превышать 200, а то и больше. При этом бывает, что какая-то запись испорчена и вся пачка не вставляется, при таком логе найти ту запись сложно:

 ... (part of Traceback is skipped) ...
"/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py\", line 948, in execute\n    return meth(self, multiparams, params)\n
... (part of Traceback is skipped) ...
File \"/usr/local/lib/python3.6/site-packages/mysql/connector/connection.py\", line 396, in _handle_result\n    raise errors.get_exception(packet)\nsqlalchemy.exc.DataError: (mysql.connector.errors.DataError) 1264 (22003): Out of range value for column 'tlm_1' at row 722
... Здесь идет длинный запрос ...

Структура запроса: INSERT INTO <таблица> <поля> VALUES (<запись 1>, <запись 2>, … )
Имеется ли какая-то возможность логировать/выделить проблемную запись со всего списка?



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#2 Дек. 25, 2018 01:50:27

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

SQLAlchemy - показать лишь одну запись, на которой валится запрос?

Master_Sergius
Имеется ли какая-то возможность логировать/выделить проблемную запись со всего списка?
Вообще, по этой же причине принято писать код так, чтобы на одной строке стоял только один оператор. Тогда при ошибке и указании строки с ошибкой (в отладчике или при компиляции) сразу указывается оператор, в котором произошла ошибка. Так что надо попробовать разбить на строки команду, чтобы “записи” стояли по одной записи на одной строке.

Если же это невозможно, а запрос должен быть только один, то можно попробовать переопределить исключение, которое выпадает, чтобы в новом варианте исключения, сохранялась более подробная информация.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version