2010-01-25 46 views
5

我使用web2py來爲我的網站供電。我決定將web2py DAL用於在網站後面運行的長時間運行的程序。 該程序似乎沒有更新其數據或數據庫(有時)。DAL without 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() 

它不會更新數據庫,並且對具有此ID的訂單進行選擇時顯示正確的數據。在某些情況下,提交後的「db.rollback()」似乎有所幫助。

很奇怪的是,至少可以說。你見過這個嗎?更重要的是你知道解決方案嗎?


UPDATE:
更正: 有問題的選擇是在程序中完成的,而不是外面。

有時候,當進行一系列更新時,有些更新會有效並且可以在外部使用,有些則不可用。即使從原始查詢開始,數據在數據庫中發生變化,一些查詢也會返回最初返回的數據。

我很想轉儲這種方法,並轉移到另一種方法,有什麼建議嗎?

+0

記住,數據庫對象不能在線程間共享。 – mdipierro 2010-01-25 14:00:28

回答

2

此問題已得到解決: mysql的隔離級別REPEATABLE READ運行(也就是,一旦交易開始,該數據反映在選擇輸出不會改變,直到在事務結束)。它需要將隔離級別更改爲READ COMMITED並解決了問題。順便說一句,READ COMMITED是默認運行Oracle和mssql的隔離級別。 這可以在my.cnf中設置。在下面的鏈接詳細信息:

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