2010-01-25 16 views
5

Estoy usando web2py para alimentar mi sitio web. Decidí usar web2py DAL para un programa de larga ejecución que se ejecuta detrás del sitio. Este programa no parece actualizar sus datos o la base de datos (a veces).DAL sin web2py

from gluon.sql import * 
from gluon.sql import SQLDB 

from locdb import * 
# contains 
# db = SQLDB("mysql://user/[email protected]/mydb", pool_size=10) 
# db.define_table('orders', Field('status', 'integer'), Field('item', 'string'), 
# migrate='orders.table') 
orderid = 20 # there is row with id == 20 in table orders 
#when I do 
db(db.orders.id==orderid).update(status=6703) 
db.commit() 

No actualiza la base de datos, y una selección en pedidos con esta identificación, muestra los datos correctos. En algunas circunstancias, un "db.rollback()" después de una confirmación parece ayudar.

Muy extraño, por decir lo menos. ¿Has visto esto? Más importante aún, ¿conoces la solución?


ACTUALIZACIÓN:
Corrección: La de selección en cuestión se lleva a cabo dentro del programa, no fuera de él.

A veces, al hacer una serie de actualizaciones, algunas funcionarán y estarán disponibles en el exterior y otras no estarán disponibles. También algunas consultas devolverán los datos que originalmente devolvió aunque los datos tengan cambios en la base de datos desde la consulta original.

Estoy tentado de volcar este enfoque y pasar a otro método, ¿alguna sugerencia?

+0

cuenta que el objeto db no puede ser compartida a través de las discusiones. – mdipierro

Respuesta

2

Este problema se ha resuelto: MySQL funciona a LEER REPETIBLE nivel de aislamiento (es decir, una vez que se inicia la transacción, los datos reflejados en la selección de salida no cambiará hasta que termina la transacción). Necesitaba cambiar el nivel de aislamiento a READ COMMITH y eso resolvió el problema. Por cierto, READ COMMITED es el nivel de aislamiento en el que Oracle y mssql se ejecutan de forma predeterminada. Esto se puede configurar en el my.cnf. Los detalles en el siguiente enlace:

http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html