6
我想弄清楚事務如何在扭曲的adbapi模塊中工作。我目前使用runOperation()來執行INSERT和UPDATE語句。下面將鏈接到的文檔使其看起來支持事務處理,但它似乎並不符合我的願望。下面是一些示例代碼(它的一個氣旋的Web服務器中運行,但希望這是不相關):在扭曲的adbapi交易支持
class OperationHandler(cyclone.web.RequestHandler):
@cyclone.web.asynchronous
def get(self, *args, **kwargs):
d = conn.runOperation("INSERT INTO Table1 (Field1, Field2) VALUES ('a', 'b')")
d.addCallback(self.next1)
def next1(self, rows):
d = conn.runOperation("UPDATE Table1 SET Field1 = 'c'")
d.addCallback(self.next2)
def next2(self, rows):
raise Exception("rollback")
self.finish("done")
在即使有異常,在過去的回調提出,無論是INSERT和UPDATE語句這種情況下被執行。不是我想要的。
我試着轉換使用runInteraction()方法,但我不知道我做的是否正確。
class InteractionHandler(cyclone.web.RequestHandler):
@cyclone.web.asynchronous
def get(self, *args, **kwargs):
d = conn.runInteraction(self.someTransaction)
d.addCallback(self.done)
def someTransaction(self, txn):
txn.execute("INSERT INTO Table1 (Field1, Field2) VALUES ('a', 'b')")
txn.execute("UPDATE Table1 SET Field1 = 'c'")
txn.execute("UPDATE Table1 SET Field1 = 'd'")
raise Exception("rollback")
def done(self, rows):
print rows
self.finish("done")
在這種情況下,我得到了我想要的一切它回滾的效果,但正如你所看到的代碼是完全不同的。除了將回調鏈接在一起,每個回調都運行一個查詢,我只是用一個大方法來執行所有的事情。
爲了支持交易,這是必須完成的嗎?
這裏是鏈接到文件:
http://twistedmatrix.com/documents/current/core/howto/rdbms.html
感謝您的輸入! – d512 2012-07-18 19:23:02