[英]In tornado database module does execute_lastrowid(…) work fine with concurrency?
我正在使用Tornado Web服務器編寫服務器應用程序。 應用程序通過tornado.database
模塊與MySQL數據庫tornado.database
。 在DB中有一個表
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的正確工作。 在我的情況下,整個applcation只有一個連接。
因此,如果有幾個並發客戶端查詢到/somequery
,最后一行id可能會在客戶端之間混亂或龍卷風處理它嗎?
我試着查看tornado.database
來源 ,但沒有發現我的問題。
如果這不行,怎么辦?
execute_lastrowid
(實際上通常是tornado.database
)不是異步的,也就是說,它會阻止你的應用程序。
因此,您不會從其他客戶端的請求中獲取id,但如果一次插入需要很長時間,則其他客戶端將不得不等待它。
與您的問題無關,但通常不應通過GET請求訪問數據更改(例如INSERT)。 請改用POST。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.