में लेनदेन समर्थन मैं यह पता लगाने की कोशिश कर रहा हूं कि लेन-देन के एडबैपी मॉड्यूल में लेन-देन कैसे काम करते हैं। मैं वर्तमान में INSERT और UPDATE स्टेटमेंट निष्पादित करने के लिए runOperation() का उपयोग कर रहा हूं। दस्तावेज, जो मैं नीचे से लिंक करूंगा, ऐसा लगता है कि यह लेनदेन का समर्थन करता है, लेकिन ऐसा लगता है कि मैं जिस तरह से चाहता हूं। यहाँ कुछ उदाहरण कोड है (इसकी एक चक्रवात वेब सर्वर के अंदर चल रहा है, लेकिन उम्मीद है कि प्रासंगिक नहीं है):ट्विस्टेड 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")
इस मामले भले ही एक अपवाद है, पिछले कॉलबैक में उठाया है दोनों सम्मिलित करें और अद्यतन बयान में क्रियान्वित कर रहे हैं । मैं क्या चाहता हूँ नहीं।
मैंने 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