Для запроса определенного значения столбца взгляните на этот вопрос: Запрос Flask SQLAlchemy, укажите имена столбцов . Вот пример кода, приведенный в верхнем ответе:
result = SomeModel.query.with_entities(SomeModel.col1, SomeModel.col2)
Суть вашей проблемы в том, что вы хотите создать новый Show
экземпляр, если это шоу еще не существует в базе данных.
Запрос к базе данных для всех шоу и циклический просмотр результатов для каждого потенциального нового шоу может стать очень неэффективным, если в итоге вы получите много шоу в базе данных, а поиск по идентификатору - это то, что лучше всего делает СУБД!
Эта функция проверит, существует ли объект, и создаст его, если нет. Вдохновленный этим ответом :
def add_if_not_exists(model, **kwargs):
if not model.query.filter_by(**kwargs).first():
instance = model(**kwargs)
db.session.add(instance)
Итак, ваш пример будет выглядеть так:
def add_if_not_exists(model, **kwargs):
if not model.query.filter_by(**kwargs).first():
instance = model(**kwargs)
db.session.add(instance)
for show in show_details:
add_if_not_exists(Show, id=show['id'])
Если вы действительно хотите запросить все показы заранее, вместо помещения всех идентификаторов в список, вы можете использовать набор вместо списка , что ускорит ваш тест включения.
например:
show_compare = {item.show_id for item in Show.query.all()}
for show in show_details:
# ... same as your code