Hello, I am setting the SQLAlchemy to work with meetings, but not the rollback, no mistake, it keeps the data bb.dd. As if there were no rollback in the code. We show the example:
model.py from elixir import * from turbogears.database import metadata options_defaults['autosetup'] = False metadata.bind = 'sqlite:///devdata.sqlite' metadata.bind.echo = True class Persona(Entity): nombre = Field(Unicode(30)) compras_realizadas = OneToMany('Compra', inverse='cliente') using_options(tablename='personas') ...... ...... ..... controllers.py from sqlalchemy.orm import scoped_session, sessionmaker from sqlalchemy import create_engine engine = create_engine('sqlite:///devdata.sqlite') Session = sessionmaker(bind=engine, autoflush=False, transactional=False) sess = Session() def procesar_compra(self, cliente, articulo, cantidad): #Trae los objetos correspondientes a cada id que viene aux_articulo = Articulo.get(articulo) aux_cliente = Persona.get(cliente) #calcula el valor de la compra total = cantidad * float(aux_articulo.precio) # Generamos la orden. #elixir.session.begin() sess.begin() comp = Compra(cliente=aux_cliente, articulo=aux_articulo, cantidad=cantidad, total=total) #sess.save(comp) #elixir.session.flush() sess.flush() # Obtengo la cantidad en stock y la instancia stock para ese articulo. stock_cantidad = aux_articulo.stock.cantidad stock = Stock.get(aux_articulo.stock.id) #Calcula lo que va quedar en deposito(si acepto el pedido) despues #pregunto si es >0, o cual me dice que puedo aceptar el pedido, si #no es asi, debo hacer el rollback de la clase Compra, ya que #cree la instancia, debuio a que no dispongo con el stcok suficiente #para responder al pedido realizado restan = int(stock_cantidad) - int(cantidad) if restan <= 0: print '/'*50 sess.rollback() #sess.close() #elixir.session.commit() # session.close() print '#'*50 flash('No hay stock disponible') raise redirect('/index') else: stock.cantidad = restan #elixir.session.commit() sess.commit() print '*'*50 print 'Quedan en deposito' print stock.cantidad print '*'*50 flash('Compra realizada con exito') raise redirect('/index') I wanted to ask if it's okay configuration of the meeting and if the method "procesar_compra" is well used begin, flush, commit and rollback. Thank you and greetings. An Embrace --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---