Size: a a a

2020 August 27

DB

Dima Boger in PiterPy Meetup
Но exists мне кажется окей, в том числе потому что можно реализовывать soft-delete техники, дополнительно фильтровать, например
источник

A

Anatoly in PiterPy Meetup
Dima Boger
Просто в большинстве случаев такая ошибка может случиться если:
- кто-то ручками пытается сделать какую-нибудь дичь
- клиент написан с логической ошибкой и пытается сделать какую-то дичь
- кто-то параллельно работал над этими же кусками данных и удалил person/group

Во всех случаях хорошо бы эту ошибку залогировать, отправить куда-нибудь алерт и разбираться как так вышло. А на клиент можно вернуть что-нибудь вроде "обновите страницу и попробуйте ещё раз" 😈, т.к. пользователь всё равно ничего с этой ошибкой не сможет сделать во всех случаях
Круто, спасибо за такой ответ)
источник

ED

Eugene Denisov in PiterPy Meetup
Anatoly
Привет!
Подскажите, пожалуйста, как можно обрабатывать ошибки от БД?
Т.е. есть эндпоинт, принимает json, например, такой
{
 "person_id": uuid,
 "group_id": uuid,
 "person_name": "blabla"
}

Я хочу знать, что person_id и group_id (внешний ключ) существуют в БД. Но выполнять 2 запроса для проверки, мне кажется неправильным. Можно было бы написать try except для каждого типа исключения (не найден person_id, отсутствует внешний ключ group_id) при сохранении полей этого json в БД. Но вопрос в том как это можно переиспользовать для других эндпоинтов. Потому что в другом потребуется проверка только  person_id, а в другом group_id. Пишу на fastapi.
Можно (но не нужно) ещё сделать отдельную таблицу в БД с foreign key на обе исходные таблицы. На каждый запрос пытаться создать в новой таблице запись. Не создалась — значит чего-то не хватает. И делать это в виде транзакции, которую в любом случае откатываем. Тогда таблица всегда будет пустая.
Решение ужасное, но зато к БД всего 1 запрос.
источник

DB

Dima Boger in PiterPy Meetup
Eugene Denisov
Можно (но не нужно) ещё сделать отдельную таблицу в БД с foreign key на обе исходные таблицы. На каждый запрос пытаться создать в новой таблице запись. Не создалась — значит чего-то не хватает. И делать это в виде транзакции, которую в любом случае откатываем. Тогда таблица всегда будет пустая.
Решение ужасное, но зато к БД всего 1 запрос.
👿
источник

DB

Dima Boger in PiterPy Meetup
Это где тебя такому научили
источник

A

Anatoly in PiterPy Meetup
Eugene Denisov
Можно (но не нужно) ещё сделать отдельную таблицу в БД с foreign key на обе исходные таблицы. На каждый запрос пытаться создать в новой таблице запись. Не создалась — значит чего-то не хватает. И делать это в виде транзакции, которую в любом случае откатываем. Тогда таблица всегда будет пустая.
Решение ужасное, но зато к БД всего 1 запрос.
ууух)) Решил, что для клиента, действительно, не так важно сообщение об ошибке, поэтому залогирую ее и отправлю bad_request
источник

ED

Eugene Denisov in PiterPy Meetup
Просто задумался, можно ли обойтись одним запросом.
источник

DB

Dima Boger in PiterPy Meetup
Eugene Denisov
Просто задумался, можно ли обойтись одним запросом.
Мне просто всегда интересно общаться с людьми, у которых в проде были подобные решения. Всегда прикольно послушать прохладные истории про поддержку / рефакторинг такого)
источник

ED

Eugene Denisov in PiterPy Meetup
Это как с котом Шрёдингера: мысленные эксперименты можно проводить сколько угодно, но настоящих котов убивать лучше не надо.
источник

Б

Боброний in PiterPy Meetup
источник

E

Eugene in PiterPy Meetup
А как аннотировать тип для возвращаемого значения для такого?
def foo():
   return List[str]
источник

E

Eugene in PiterPy Meetup
Type[List[str]]? :)
источник

DB

Dima Boger in PiterPy Meetup
Eugene
Type[List[str]]? :)
Да
источник

E

Eugene in PiterPy Meetup
То есть Type можно использовать для указания, что это именно тайп-хинт,а не некий наследуемый от type объект?
источник

D

Dima in PiterPy Meetup
from typing import List
def foo() ->  List[str]:
   return
['DFDF', ...]
источник

DB

Dima Boger in PiterPy Meetup
Eugene
То есть Type можно использовать для указания, что это именно тайп-хинт,а не некий наследуемый от type объект?
Мне кажется я такое даже где-то делал
источник

D

Dima in PiterPy Meetup
Это все для нашего удобства
источник

D

Dima in PiterPy Meetup
вот пример
источник

D

Dima in PiterPy Meetup
источник

DB

Dima Boger in PiterPy Meetup
Dima
from typing import List
def foo() ->  List[str]:
   return
['DFDF', ...]
Не понял к чему ты это 🤔
источник