Python 在tornado数据库模块中,execute_lastrowid(…)是否可以与并发性一起正常工作?

Python 在tornado数据库模块中,execute_lastrowid(…)是否可以与并发性一起正常工作?,python,mysql,concurrency,tornado,Python,Mysql,Concurrency,Tornado,我正在使用编写一个服务器应用程序。应用程序通过tornado.database模块与MySQL数据库协同工作。数据库中有一个表 创建表SampleTable( id INT NOT NULL自动递增主键, txt VARCHAR(256) ); 作为对某些查询的反应,我需要在此表中写入一条新记录,并将新创建记录的id返回给客户端。因此,在服务器代码中,我有以下几行代码: 类应用程序(tornado.web.Application): 定义初始化(自): 处理程序=[(r'/somequery'

我正在使用编写一个服务器应用程序。应用程序通过
tornado.database
模块与MySQL数据库协同工作。数据库中有一个表

创建表SampleTable(
id INT NOT NULL自动递增主键,
txt VARCHAR(256)
);
作为对某些查询的反应,我需要在此表中写入一条新记录,并将新创建记录的
id
返回给客户端。因此,在服务器代码中,我有以下几行代码:

类应用程序(tornado.web.Application):
定义初始化(自):
处理程序=[(r'/somequery',queryHandler)]
tornado.web.Application.\uuuuu init\uuuuuuu(self,handlers)
self.db=tornado.database.Connection(
host=“localhost”,database=“sampledb”,
user=“sampleuser”,password=“samplepassword”)
和一个处理程序:

class queryHandler(tornado.web.RequestHandler):
def post(自我):
lastid=self.db.execute\u lastrowid(“插入到\
样本表(txt)\
值('some text');“”)
打印lastid
据我所知,
tornado.database
是围绕
MySQLdb
python模块的一个相对简单的包装器,它只保证每个连接的最后一行id的正确工作。在我的例子中,整个应用程序只有一个连接

所以,在对
/somequery
进行多个并发客户端查询的情况下,最后一行id是否可能会在客户端之间出现混乱,或者由tornado处理

我试着查看了tornado.database的,但没有发现任何关于我的问题


如果这不能很好地工作,怎么办?

执行\u lastrowid
(实际上通常是
tornado.database
)不是异步的,也就是说,它会阻止您的应用程序

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


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

改为
POST
。这不是实际的代码,只是为了说明目的。我在哪里可以找到异步和同步操作在tornado中是如何混合的信息?好问题。看起来龙卷风里什么都没有,真的。邮件列表中有一些讨论:除此之外,还有概述()和源代码。