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
-~----------~----~----~----~------~----~------~--~---

Reply via email to