#python #sql #sqlalchemy
#питон #sql #sqlalchemy
Вопрос:
Привет, я новичок в SQLAlchemy с использованием python. Я хочу обновить таблицу под названием Cars и хотел бы получить некоторые отзывы, если, возможно, есть другой способ обновления таблицы. Я не уверен, что функция execute() является хорошим способом обновления, поскольку она вызывает запрос. Я искал везде, но просто попытался выполнить простой запрос и обновить.
Вот график, которому я следую:
Вот мой код:
from cars.models import Cars from cars.models import CarType from sqlalchemy.orm import session from sqlalchemy.sql.expression import update from sqlalchemy.sql.sqltypes import String, Text # To update cars def update_cars_models(session): db = session try: state = db.query(Cars).filter(Cars.state == "PRE_PROCESS") for row in state.all(): if row.state == "PRE_PROCESS": # To add CarType object data car_update = CarType(1, "Subaru", "WHITE", "PRE_PROCESS") db.add(car_update) db.commit() # To update Cars object row.state = Cars.State.PROCESS #not sure if this how you use update db.commit() except SQLAlchemyError as error: print(f"Error querying: {error}") finally: db.close() if __name__ == "__main__": # To update cars update_cars_models(session)
Ответ №1:
Вам не нужно запрашивать все строки, а затем редактировать каждую строку в цикле. В вашем коде показано, что вы хотите обновить те строки, состояние которых «PRE_PROCESS».
car_update = { state = "PROCESS" } rows_updated = (db.session.query .filter(Car.state == "PRE_PROCESS") .update(car_update) )
Если вы хотите обновить строку для определенного идентификатора, вы можете написать «Car.id == 1» в фильтре
Комментарии:
1. Я прикрепил график, которому я следую, поэтому это состояние автомобиля должно быть обновлено для ОБРАБОТКИ после того, как состояние CarType находится в состоянии PRE_PROCESS, ваш блок .обновление(car_update) выведет триггер из цикла?
2. Вам не нужно иметь петлю. .Фильтр(Car.state == «PRE_PROCESS») получит все строки, состояние которых «PRE_PROCESS», и обновится до «PROCESS».
3. Хорошо, но CarType будет добавлен в базу данных, как только Cars будет находиться в режиме PRE_PROCESS, так что не был в цикле все равно будет работать?
4. ах, может быть, я могу присоединиться?