IMO, это выглядит лучше:
author_id = line[3]
alternate_id = author_mapper[author_id]
query = Author.filter(internal_id = author_id)
alternate_query = Author.filter(internal_id = alternate_id)
query = query or alternate_query
author = query[0]
Некоторые примечания: вы должны быть в состоянии гарантировать, что эти внутренние идентификаторы уникальны (это можно предположить, так как вы используете метод get).Альтернативный запрос не будет выполнен, пока первый запрос имеет результаты.Дальнейшее улучшение может заключаться в том, чтобы метод возвращал запрос и альтернативный запрос.Тогда вы даже не сможете создать экземпляр запроса (это довольно дешево, но если вы действительно ищете легкий и чистый ...)
Пример:
author_id = line[5]
query = RegularQuery(author_id) or AlternateQuery(author_id, author_mapper)
author = query[0]
На всякий случайнеясен, что происходит, когда оператор «или» обрабатывает два запроса (любой логический оператор в этом отношении), они выполняются и оцениваются в режиме короткого замыкания.Запросы оцениваются как true, если они имеют результаты, и false, если нет.Таким образом, если обычный запрос имеет результаты, альтернативный запрос не будет выполнен.