- счетчик ошибок (поле count) . Как только счетчик больше порога - в первой таблице поле enabled нужно переставить в значение false.
Создавать тригер не особо хочу, поскольку синтаксис может меняться в зависимости от субд. Да и сама операция создания подразумевает написания sql-запроса Думаю в сторону event.listens_for.
Правилен ли подход, или можно вообще обойтись и без тригеров и листенеров путем джойна таблиц и выбора тех строк, которые ниже порога?
А у тебя много откуда этот count меняется?
Через asyncio.gather выполняются таски. Порядка 50-70. И в случае ошибки, счётчик ошибок нужно увеличить.
Я бы предпочел явно прописать def add_failure(model): model.count += 1 if model.count > X: model.enabled = False
указал вот так, имеет право на жизнь, если в приложении использется и класический и декларативный способ? target_metadata = models.metadata target_metadata = auth_models.Base.metadata
понял. ну это имеет место быть, если 2 поля находятся в одной таблице.
В любом случае можно сделать def add_failure(model, model2): model.count += 1 if model.count > X: model2.enabled = False Раз уж предполагается что count превысивший X должен менять enabled
Идею понял. Спасибо. А чем листенеры плохи?
Ещё не забыть with for update
Просто не нравится идея выполнения бизнес-правил завязываясь на механизмы SQLAlchemy. Эвенты допускаю, но предпочел бы реализовать их самостоятельно model.count += 1 event_observer.publish(SomethingFailedEvent(..., fails_count=model.count, model2_id=model.model2_id)) def fails_handler(event: SomethingFailedEvent, model2_repo): if event.fails_count > X: model2 = model2_repo.get_model(event.model2_id) model2.enabled = False
Обсуждают сегодня