estoy usando la alquimia sql en mi proyecto, he utilizado sesión db,¿Cómo se usa la transacción en sql alquimia durante el uso de la sesión de db?
engine = create_engine(configuration)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
def init_db():
import models
Base.metadata.create_all(bind=engine)
sesión de base de datos utilizado como:
db_session.merge(order) #order(model) in object
db_session.commit()
Ahora quiero insertar datos en dos tablas de pedido o la línea orden , por lo que necesito transacción, como: Identificación de fin 1. en primer inserto deseo que se inserte a utilizar en la segunda consulta de inserción 2. Si la segunda consulta de inserción fracasaron luego la primera consulta debe Rollback
Try:
#begin transaction/How to begin transaction?
order=db_session.add(order) #insert into order
#is need to commit db_session here as I need inserted orders id
#here actually db_session.commit() needed to get order's id(auto generated)
#if db_session committed here then sql alchemy starts new session
order_line_item.id = order.id
db_session.add(order_line_item) #insert into order line line item
db_session.commit()
#check transaction status if failed then rollback, How to check status?
except:
db_session.rollback()
¿Cómo utilizar la trasacción?
Yo usaría 'con db_session.begin(): ...' y, si fuera posible, eliminaría 'try: ... excepto: ...' ya que oculta todas las excepciones. – Governa
'flush' no está destinado, también. ¡Vea mi respuesta cómo debería hacerse! – schlamar