我正在使用web2py为我的网站供电。我决定将web2py DAL用于在网站后面运行的长期运行程序。 该程序似乎没有更新其数据或数据库(有时)。
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()
它不会更新数据库,并且对具有此ID的订单进行选择会显示正确的数据。在某些情况下,提交后的“db.rollback()”似乎有所帮助。
至少可以说很奇怪。你见过这个吗?更重要的是你知道解决方案吗?
更新
更正:
有问题的选择是在程序内完成的,而不是在程序之外。
有时候,在进行一系列更新时,有些会在外面使用,有些则无法使用。此外,一些查询将返回它最初返回的数据,即使数据在自原始查询以来数据库中发生了更改。
我很想抛弃这种方法并转向另一种方法,任何建议?
答案 0 :(得分:3)
此问题已得到解决: mysql以隔离级别REPEATABLE READ运行(也就是说,一旦事务开始,select事件中反映的数据将不会改变,直到事务结束)。它需要将隔离级别更改为READ COMMITED并解决了该问题。顺便说一句,READ COMMITED是Oracle和mssql默认运行的隔离级别。 这可以在 my.cnf 中设置。以下链接中的详细信息: