我正在使用Tornado web server编写服务器应用程序。应用程序通过tornado.database
模块处理MySQL数据库。数据库里有一张桌子
CREATE TABLE SampleTable (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
txt VARCHAR(256)
);
作为对某些查询的反应,我需要向该表写入一个新记录,并将新创建的记录的id
返回给客户机。所以在服务器代码中我有以下几行:
和一个处理者:
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会在客户机之间造成混乱,或者tornado会处理它?在
我试图查找tornado.database
的source,但没有发现任何与我的问题有关的内容。在
如果这样不行,怎么办?在
execute_lastrowid
(实际上tornado.database
)不是异步的,也就是说,它将阻止您的应用程序。在因此,您不会从另一个客户机的请求中获得id,但是如果一次插入需要很长时间,其他客户机将不得不等待它。在
与您的问题无关,但通常不应通过GET请求访问数据更改(例如插入)。使用POST代替。在
相关问题 更多 >
编程相关推荐