【发布时间】:2017-11-20 17:15:03
【问题描述】:
我正在使用tornado 框架来编写一个非阻塞API。
我想进行异步 mysql 查询,为此我应该使用异步 mysql 库(用于龙卷风)还是可以使用类似的东西?
import tornado.web
import pymysql
import json
class AsyncDBCalls(tornado.web.RequestHandler):
def initialize(self):
database = {
"host": "localhost",
"user": "root",
"password": "123456",
"db": "tableName",
"cursorclass": pymysql.cursors.DictCursor,
"autocommit": True,
"charset": "utf8"
}
try:
self.db_connection = pymysql.connect(**database)
self.db = self.db_connection.cursor()
except pymysql.err.OperationalError:
pass
# TODO logging
async def make_query(self, query):
self.db.execute(query)
results = self.db.fetchall()
return results
@tornado.web.asynchronous
async def get(self):
query = "SELECT * FROM users"
results = await self.make_query(query)
self.set_status(200)
self.add_header("Content-Type", "text/json")
self.write(json.dumps(results))
self.finish()
这个 make_query 函数是异步运行的吗?这段代码可以用于非阻塞API吗?
【问题讨论】:
-
不,
PyMySQL不是异步的。因此,它会阻止 Tornado 服务器。但是你可以使用aiomysql。它基于PyMySQL,因此您不必学习很多东西。
标签: python mysql asynchronous tornado pymysql