Data access layer 没有web2py的DAL

Data access layer 没有web2py的DAL,data-access-layer,web2py,Data Access Layer,Web2py,我正在使用web2py为我的网站供电。我决定将web2py DAL用于在站点后面运行的长时间运行的程序。 此程序似乎不更新其数据或数据库(有时) 它不会更新数据库,并且使用此id对订单进行选择会显示正确的数据。在某些情况下,提交后的“db.rollback()”似乎会有所帮助 至少可以说很奇怪。你看到这个了吗?更重要的是,你知道解决方案吗? 更新: 更正: 有问题的选择是在程序内部完成的,而不是在程序外部完成的 有时,在执行一系列更新时,有些可以在外部使用,有些则不可用。此外,一些查询将返回

我正在使用web2py为我的网站供电。我决定将web2py DAL用于在站点后面运行的长时间运行的程序。 此程序似乎不更新其数据或数据库(有时)

它不会更新数据库,并且使用此id对订单进行选择会显示正确的数据。在某些情况下,提交后的“db.rollback()”似乎会有所帮助

至少可以说很奇怪。你看到这个了吗?更重要的是,你知道解决方案吗?


更新:
更正: 有问题的选择是在程序内部完成的,而不是在程序外部完成的

有时,在执行一系列更新时,有些可以在外部使用,有些则不可用。此外,一些查询将返回它最初返回的数据,即使自th4原始查询以来数据库中的数据发生了更改

我很想放弃这种方法,转而使用另一种方法,有什么建议吗?

此问题已得到解决: mysql以隔离级别可重复读取运行(即,一旦事务开始,select输出中反映的数据在事务结束之前不会更改)。它需要将隔离级别更改为committed,这就解决了问题。顺便说一下,ReadCommitted是Oracle和mssql默认运行的隔离级别。 这可以在my.cnf中设置。详情请参见以下链接:


请注意,db对象不能跨线程共享。
from gluon.sql import *
from gluon.sql import SQLDB

from locdb import * 
# contains
# db = SQLDB("mysql://user/pw@localhost/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()