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.

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

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

Войти через центр авторизации
Похожие вопросы