Я работаю над своим первым подходящим веб-приложением, следуя «Мега-учебнику Flask».Это помогло мне начать работу с SQLAlchemy ORM и дало мне некоторое представление о том, как использовать этот инструмент.
Например, у меня есть класс Pet.Я могу позвонить
foo = Pet.query.filter_where(id=1).first()
, это приводит к Фу класса Pet.Определение Pet имеет много атрибутов, но каждый из них имеет тип «db.Column», что имеет смысл, потому что каждый Pet является записью в таблице Pets.
Там, где я запутался, теперь я хочу выполнить более сложный SQL для таблицы Pet, но у меня все еще есть доступ к этим записям в качестве объектов Pet.
pets = db.session.execute('SELECT * FROM pet WHERE blahblah = blahblah').fetch_all()
И теперь у меня есть эти питомцыПеречислите, какие все атрибуты для каждой записи питомца возвращены запросом.
Как теперь создать экземпляры объектов класса Pet для каждой из этих записей?Когда я запрашиваю с ORM, я получаю объекты обратно.Мой класс Pet, как определено в app / models.py, не имеет init , который принимает любые аргументы.
Прямо сейчас я беру список результатов, извлекаю значение "id" из результатов, а затем в цикле for, создавая их все как объекты
pets = db.session.execute('SELECT * FROM pet WHERE blahblah = blahblah').fetch_all()
pet_objects=[]
for p in pets:
record_id = p.id
pet_object = Pet.query.filter_where(id=record_id)
pet_objects.append(pet_object)
Из какой точкиЯ могу обрабатывать свой список объектов Pet так же, как результаты запроса с использованием ORM, который автоматически возвращает объекты.
У меня вопрос, правильно ли я делаю?Кажется неправильным, потому что для каждой записи я сначала ударил базу данных с помощью своего SQL, а затем снова для создания экземпляра объекта по его 'id', но я не уверен, как еще перейти от записи -> Object в этой структуре.
Извините за длинный вопрос, но я уже некоторое время с этим борюсь.