This might work:

------
...import transaction...

try:
  session.add(importe)
  session.flush()
  transaction.commit()
  transaction.begin()
  nimportados += 1
except Exception as ex:
  transaction.abort()
  transaction.begin()
  log.debug(ex)
  nerroneos += 1
------

On Oct 14, 12:05 pm, Juan Antonio Ibáñez <[email protected]>
wrote:
> Trying next code:
>
> -------------------------
> try:
>   session.begin(subtransactions=True)
>   session.add(importe)
>   session.flush()
>   nimportados += 1
> except Exception as ex:
>   log.debug(ex)
>   session.rollback()
>   nerroneos += 1
> -------------------------
>
> I can see into the log:
>
> -------------------------
> 12:55:45,598 INFO  [sqlalchemy.engine.base.Engine.0x...f1ac] BEGIN
> 12:55:45,600 INFO  [sqlalchemy.engine.base.Engine.0x...f1ac] INSERT
> INTO importes (tarifas_id, prefijo, destino, importe, tipo, pc, psi,
> ps, sg) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
> 12:55:45,600 INFO  [sqlalchemy.engine.base.Engine.0x...f1ac] [u'1',
> 'PREFIJO', 'DESTINO', 'IMPORTE', u'', 0, 60, 60, 0]
> 12:55:45,601 INFO  [sqlalchemy.engine.base.Engine.0x...f1ac] ROLLBACK
> 12:55:45,603 DEBUG [svbpanel.controllers] (IntegrityError) (1062,
> "Duplicate entry 'PREFIJO' for key 'prefijo'") u'INSERT INTO importes
> (tarifas_id, prefijo, destino, importe, tipo, pc, psi, ps, sg) VALUES
> (%s, %s, %s, %s, %s, %s, %s, %s, %s)' [u'1', 'PREFIJO', 'DESTINO',
> 'IMPORTE', u'', 0, 60, 60, 0]
> 12:55:45,603 DEBUG [svbpanel.controllers] The transaction is inactive
> due to a rollback in a subtransaction.  Issue rollback() to cancel the
> transaction.
> -------------------------
>
> and "InvalidRequestError: The transaction is closed" into TG web debug
> messages.
>
> It seems to auto run the ROLLBACK but. Any idea?
>
> On 13 oct, 15:00, "Diez B. Roggisch" <[email protected]> wrote:
>
> > On Wednesday, October 13, 2010 14:43:31 Juan Antonio Ibáñez wrote:
>
> > > Hello!
>
> > >   I am trying to do some INSERT to my DB from one controller method. I
> > > do following try/except inside a loop:
>
> > > try:
> > >   DBSession.add(importe)
> > >   DBSession.flush()
> > >   nimportados = nimportados + 1
> > > except Exception as ex:
> > >   nerroneos = nerroneos + 1
>
> > > I need to check how many inserts are ok and how many with error. Using
> > > previous code I get following message when an exception occurs:
>
> > > InvalidRequestError: The transaction is inactive due to a rollback in
> > > a subtransaction. Issue rollback() to cancel the transaction.
>
> > > Is there any way to force insert for each add() call and to control
>
> > No. Use sub-transactions for that. I had that discussion with Michael Bayer
> > before. He's adamant about this.
>
> > Diez

-- 
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en.

Reply via email to