我正在使用Tornado web server來編寫服務器應用程序。應用程序通過tornado.database
模塊與MySQL數據庫配合使用。在DB有一個表在龍捲風數據庫模塊中execute_lastrowid(...)與併發性一起工作嗎?
CREATE TABLE SampleTable (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
txt VARCHAR(256)
);
由於對某些查詢我需要寫一個新的記錄到此表,並返回新創建的記錄的id
客戶的反應。所以在服務器代碼中,我有以下行:
class Application(tornado.web.Application):
def __init__(self):
handlers = [(r'/somequery', queryHandler)]
tornado.web.Application.__init__(self, handlers)
self.db = tornado.database.Connection(
host="localhost", database="sampledb",
user="sampleuser", password="samplepassword")
和處理程序:
class queryHandler(tornado.web.RequestHandler):
def post(self):
lastid = self.db.execute_lastrowid("INSERT INTO \
SampleTable (txt) \
VALUES('some text');")
print lastid
據我所知,tornado.database
是一個比較簡單的包裝圍繞MySQLdb
Python模塊,這保證了正確的工作只有每個連接的最後一行ID。在我的情況下,整個應用只有一個連接。
因此,如果有多個併發客戶端查詢到/somequery
是否有可能最後一行ID會在客戶端之間搞亂或龍捲風處理它?
我試圖調查source的tornado.database
,但沒有發現任何關於我的問題。
如果這不行,可以怎麼辦?
更改爲'post'。這不是實際的代碼,僅用於說明目的。我可以在哪裏找到有關異步和同步操作在龍捲風中如何混合的信息? – bazzilic 2012-04-16 00:14:24
好問題。看起來tornado.database文檔裏沒有關於它的東西,真的。它在郵件列表上有所討論:http://groups.google.com/group/python-tornado/browse_thread/thread/9a08f5f08cdab108除此之外,概述(http://www.tornadoweb.org/documentation/ overview.html)和源代碼。 – 2012-04-16 09:24:01