In this

              try:
                  #1
              except:
                  # 2

if #1 fails because it violates a constraint, than you need to
rollback before you can access the database again.
Try this:

              try:
                  #1
                  db.commit()
              except:
                  db.rollback()
                  # 2
                  db.commit()

It is not a good idea to use try...except in database operations
anyway.


On Jun 3, 5:05 pm, mmartinez <alexra...@gmail.com> wrote:
> Good afternoon, my question is this, there is a postgres sql query
> that does not work, I am doing the query q is:
>
> for r in rws:
>               try:
>                   db.ratecltes.insert(id_rutas=r.rutas.id,
> id_clte=r.clientes.id, rate=r.rutaproveedor.valor)
>               except:
>                   # # # HERE IS THE ERROR # # #
>                   query=((db.ratecltes.id_rutas==r.rutas.id) &
> (db.ratecltes.id_clte==r.clientes.id))
>                   db(query).update(rate=int(r.rutaproveedor.valor))
>
> Web2py The message sent is as follows.
>
>  File "/home/marcelo/web2py/applications/administrador/controllers/
> default.py", line 1087, in cargar_tarifas
>     db(query).update(rate=int(r.rutaproveedor.valor))
>   File "/home/marcelo/web2py/gluon/sql.py", line 3285, in update
>     self._db._execute(query)
>   File "/home/marcelo/web2py/gluon/sql.py", line 958, in <lambda>
>     self._execute = lambda *a, **b: self._cursor.execute(*a, **b)
> InternalError: transacción abortada, las órdenes serán ignoradas hasta
> el fin de bloque de transacción
>
> PostgreSQL modify the settings to see the log_statement = all, and
> this is the result:
>
> 2010-06-03 16:31:52 CLT ERROR:  transacción abortada, las órdenes
> serán ignoradas hasta el fin de bloque de transacción
> 2010-06-03 16:31:52 CLT SENTENCIA:  UPDATE ratecltes SET rate=60.0
> WHERE (ratecltes.id_rutas=1 AND ratecltes.id_clte=3);
> 2010-06-03 16:32:51 CLT WARNING:  ya hay una transacción en curso
> 2010-06-03 16:32:51 CLT WARNING:  ya hay una transacción en curso
> 2010-06-03 16:32:54 CLT WARNING:  ya hay una transacción en curso
> 2010-06-03 16:33:00 CLT WARNING:  ya hay una transacción en curso
> 2010-06-03 16:33:00 CLT ERROR:  llave duplicada viola restricción de
> unicidad «ratecltes_ndx»
> 2010-06-03 16:33:00 CLT SENTENCIA:  INSERT INTO ratecltes(id_rutas,
> id_clte, rate) VALUES (1, 3, 60.0);
> 2010-06-03 16:33:00 CLT ERROR:  transacción abortada, las órdenes
> serán ignoradas hasta el fin de bloque de transacción
> 2010-06-03 16:33:00 CLT SENTENCIA:  UPDATE ratecltes SET rate=60.0
> WHERE (ratecltes.id_rutas=1 AND ratecltes.id_clte=3);
>
> I hope I can help, not that I'm failing.

Reply via email to