Всё началось с:
Продолжаем...
Когда мы запускаем весь наш код (см. статью с индексом #7) мы получаем очень много различных предупреждений, что-то типа этого:
И чем больше у нас будет моделей, тем больше будет подобных предупреждений, а это не есть гуд!
Чтобы такого не происходило, нужно нашим моделям указать кто на что должен ссылаться, это делается с помощью параметра back_populates.
Снова запускаем наш скрипт, в котором, после создания таблицы resumes, появлялось предупреждение, теперь его там нет:
Поле back_populates явно указывает SQLAlchemy о том что эти две таблицы связаны. Есть еще настройка backref="worker", она создает параметр "worker" если он создан не был, но это уже устаревшая настройка. И лучше им не пользоваться.
Далее...
Мы можем ввести дополнительное поле, в котором будут находиться резюме удовлетворяющие каким либо условиям. Например, только те резюме где указан уровень рабочей нагрузки как part_time. Пропишем такое поле:
Напишем простенький запрос, который нам вызовет этот resumes_part_time:
После выполнения можно видеть вот такой результат:
Как можно видеть, теперь мы получили список всех работников, но теперь в каждом объекте работника есть поле resumes_part_time и там будут только те резюме которые удовлетворяют условиям, либо пустой список.
Но можно сделать вывод и другого толка - показать только тех работников, у которых резюме удовлетворяет условиям - part_time например. Это реализуется уже другой функции - contains_eager():
Результатом работы подобной конструкции будет список объектов работников, у которых резюме содержит рабочую нагрузку - part_time:
Далее, еще может потребоваться не все резюме (у работника их может быть очень много) а скажем по одному, тогда будем использовать для этого тот же contains_eager с опцией limit. Создадим более сложный запрос (с подзапросом):
Если установить лимит = 2 то ответ будет таким:
А при limit(1):
Индексы и ограничения (index & constraints)
Эти параметры можно задать при помощи __table_args__
Не всё получилось идеально правильно, но все задачи данной темы выполнены. Надеюсь что-то отложилось в моей голове... Когда же я закончу эту "Алхимию"?! Вроде бы немного осталось...
Продолжение следует...