在tornado数据库模块中,execute\uLastRowId(…)与并发性一起工作吗?

2024-05-14 00:01:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Tornado web server编写服务器应用程序。应用程序通过tornado.database模块处理MySQL数据库。数据库里有一张桌子

CREATE TABLE SampleTable (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    txt VARCHAR(256)
);

作为对某些查询的反应,我需要向该表写入一个新记录,并将新创建的记录的id返回给客户机。所以在服务器代码中我有以下几行:

^{pr2}$

和一个处理者:

class queryHandler(tornado.web.RequestHandler):
    def post(self):
        lastid = self.db.execute_lastrowid("INSERT INTO \
                                            SampleTable (txt) \
                                            VALUES('some text');")
        print lastid

据我所知,tornado.databaseMySQLdbpython模块的一个相对简单的包装器,它只保证每个连接的最后一行id的正确工作。在我的例子中,整个应用程序只有一个连接。在

所以,在多个并发的客户端查询/somequery的情况下,是否有可能最后一行id会在客户机之间造成混乱,或者tornado会处理它?在

我试图查找tornado.databasesource,但没有发现任何与我的问题有关的内容。在

如果这样不行,怎么办?在


Tags: 模块selftxtwebid数据库应用程序客户机
1条回答
网友
1楼 · 发布于 2024-05-14 00:01:38

execute_lastrowid(实际上tornado.database)不是异步的,也就是说,它将阻止您的应用程序。在

因此,您不会从另一个客户机的请求中获得id,但是如果一次插入需要很长时间,其他客户机将不得不等待它。在

与您的问题无关,但通常不应通过GET请求访问数据更改(例如插入)。使用POST代替。在

相关问题 更多 >