簡體   English   中英

在tornado數據庫模塊中execute_lastrowid(...)與並發工作正常嗎?

[英]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.databaseMySQLdb python模塊的一個相對簡單的包裝器,它保證了每個連接的最后一行id的正確工作。 在我的情況下,整個applcation只有一個連接。

因此,如果有幾個並發客戶端查詢到/somequery ,最后一行id可能會在客戶端之間混亂或龍卷風處理它嗎?

我試着查看tornado.database 來源 ,但沒有發現我的問題。

如果這不行,怎么辦?

execute_lastrowid (實際上通常是tornado.database )不是異步的,也就是說,它會阻止你的應用程序。

因此,您不會從其他客戶端的請求中獲取id,但如果一次插入需要很長時間,則其他客戶端將不得不等待它。

與您的問題無關,但通常不應通過GET請求訪問數據更改(例如INSERT)。 請改用POST。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM