Задать вопрос
th3mis
@th3mis

Как автоматически заменять имя на id?

Доброго времени суток!

Сейчас имеется таблица вида:
class TestResults(Base):
    id = Column(Integer, primary_key=True)
    test_name = Column(String)
    result = Column(Integer)


И каждую сессию тестирования, в таблице оказывается 1000 одинаковых имен, иногда конечно состав меняется, но хочется избавится от дублирования имен, ссылаясь внешним ключем на другую таблицу.

Хочу переделать в такое, и использованием внешнего ключа, что бы избавиться от избыточности данных.
class TestName(Base):
    id = Column(Integer, primary_key=True)
    name = Column(String)


class TestResults(Base):
    id = Column(Integer, primary_key=True)
    result = Column(Integer)
    name_id = Column(Integer, ForeignKey('test_name.id'), nullable=False)
    name = relationship("test_name", foreign_keys=[name_id])


Так вот вопрос, если переделать это в новый вид, то перед записью результятов придется в коде делать два запроса, или даже три?

1. Найти есть ли уже имя теста в таблице имен, если нет, то создать.
2. Создать запись ссылаясь на id из шага номер 1.

Можно как-то организовать два действия одновременно? Иначе в цикле записи тысяча раза по два запроса будет очень долно выполняться.
  • Вопрос задан
  • 257 просмотров
Подписаться 1 Оценить 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик расширенный
    14 месяцев
    Далее
  • Яндекс Практикум
    Мидл Python-разработчик
    6 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
см. update_or_create и get_or_create
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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