no puedo hacer un update, ayuda porfavor

1,491 views
Skip to first unread message

mmartinez

unread,
Jun 2, 2010, 5:51:04 PM6/2/10
to web2py-usuarios
Buenas tardes a todos.
Bueno estoy trabajando con web2py y postgres quiero hacer un update
pero no puedo, tengo el siguiente codigo:

def cargar_tarifas():
id_cliente= None
a=db.clientes
rws=None
clte=[]
rows = db().select(db.clientes.ALL)
for cliente in rows:
clte.append(cliente.rsocial)

form=FORM(TABLE(TR("Cliente:",SELECT(clte,_name="clte",requires=IS_IN_SET(clte))),
INPUT(_type='submit',_value='Aceptar')))
submit = form.element(_type="submit")
submit["_onclick"] = "return confirm('Desea cargar tarifas de
costo?? ');"
if form.accepts(request.vars,session):
for clite in rows:
if clite.rsocial==form.vars.clte:
id_cliente=clite.id
query=(db.clientes.id==id_cliente)

left=(db.rutaproveedor.on(db.rutas.id==db.rutaproveedor.id_rutas),
db.clientes.on(db.rutaproveedor.id_tarifa==db.clientes.id_tarifa))
rws = db(query).select(db.rutas.id,
db.clientes.id, db.rutaproveedor.valor,orderby=db.rutas.id,
left=left,distinct=True)
break
for r in rws:
try:
db.ratecltes.insert(id_rutas=r.rutas.id,
id_clte=r.clientes.id, rate=r.rutaproveedor.valor)
except:
query=((db.ratecltes.id_clte==r.clientes.id) &
(db.ratecltes.id_rutas==r.rutas.id))
db(query).update(id_rutas=r.rutas.id,
id_clte=r.clientes.id, rate=r.rutaproveedor.valor)
return dict(form=form, rws=rws)




Y este es el error:




Error traceback

Traceback (most recent call last):
File "/home/marcelo/web2py/gluon/restricted.py", line 178, in
restricted
exec ccode in environment
File "/home/marcelo/web2py/applications/administrador/controllers/
default.py", line 1097, in <module>
File "/home/marcelo/web2py/gluon/globals.py", line 96, in <lambda>
self._caller = lambda f: f()
File "/home/marcelo/web2py/gluon/tools.py", line 1910, in f
return action(*a, **b)
File "/home/marcelo/web2py/applications/administrador/controllers/
default.py", line 1087, in cargar_tarifas
db(query).update(id_rutas=r.rutas.id, id_clte=r.clientes.id,
rate=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


Les agradeceria mucho si me pueden ayudar o me pueden decir cual es el
error que estoy cometiendo.

Desde ya muchas gracias.

Mariano Reingart

unread,
Jun 2, 2010, 7:43:37 PM6/2/10
to web2py-...@googlegroups.com
Por la traza: "InternalError: transacción abortada, las órdenes serán
ignoradas hasta el fin de bloque de transacción", seguramente hay
alguna sentencia SQL que genera un error e invalida la transacción.

Para determinar el motivo, podrías modificar la configuración de
PostgreSQL para que registre en los logs (bitácora) todas las
sentencias, y enviar el detalle relevante:

log_statement = all

http://www.postgresql.org/docs/current/static/runtime-config-logging.html#GUC-LOG-STATEMENT

Sds

Mariano Reingart
http://www.web2py.com.ar
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com

Marcelo Martinez

unread,
Jun 4, 2010, 10:48:35 AM6/4/10
to web2py-...@googlegroups.com
gracias me sirvio lo que me habias dicho, ahi puede identificar el error, finalmente lo solucione usando "db.commit()" porque estaba tratando de acer mas de un acceso a la base de datos.

2010/6/2 Mariano Reingart <rein...@gmail.com>
Reply all
Reply to author
Forward
0 new messages