#mysql #python-3.x #error-handling #sqlalchemy #flask-sqlalchemy
#mysql #python-3.x #обработка ошибок #sqlalchemy #колба-sqlalchemy
Вопрос:
Мне нужно создать глобальный обработчик событий для SQLAlchemy
ошибок catch «таблица не существует» или «база данных не существует». Я не хочу заранее проверять, существует ли таблица/база данных, потому что это дороже, чем поймать такую ошибку.
Я попытался использовать event
обработчик ошибок SQLAlchemy ( handle_error
) для этого, но он не работает.
class MultiTenantSQLAlchemy(SQLAlchemy): # type: ignore def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) event.listens_for(self.engine, 'handle_error', self.receive_handle_error) def receive_handle_error(self, exception_context): print("listen for the 'handle_error' event") print(exception_context) db = MultiTenantSQLAlchemy(flask_app) db.session.execute('SELECT * FROM `table_that_does_not_exist`').fetchone()
Это приводит к ошибке:
(MySQLdb._экскрипции.Ошибка программирования) (1146, «Таблица ‘my_db.table_that_does_not_exit’ не существует»)
но обработчик ошибок никогда не запускается.
Я был бы признателен за помощь!
Комментарии:
1. Обратите внимание, что
SQLAlchemy
класс здесь относится к проекту flask-sqlalchemy, а не к общему решению SQLAlchemy.