Python中使用gevent+flask时,应该选择什么mysql驱动?

Mysqldb这个库好像不支持异步
如果都用的是这个库的话,不支持也没有办法。。
我也只能用 Mysql-python


Python中使用gevent+flask时,应该选择什么mysql驱动?
12 回复

不用 pymysql 不能 patch 吧。


对于gevent+flask的异步场景,你应该选择支持异步操作的MySQL驱动。最主流的选择是PyMySQL,因为它是一个纯Python实现,能够很好地与gevent的monkey patch配合。

安装很简单:

pip install pymysql

在Flask应用中使用时,你需要先打上gevent的monkey patch,然后像平常一样使用PyMySQL:

from gevent import monkey
monkey.patch_all()

from flask import Flask
import pymysql

app = Flask(__name__)

# 创建数据库连接
def get_db_connection():
    return pymysql.connect(
        host='localhost',
        user='your_username',
        password='your_password',
        database='your_database',
        charset='utf8mb4',
        cursorclass=pymysql.cursors.DictCursor
    )

@app.route('/')
def get_data():
    connection = get_db_connection()
    try:
        with connection.cursor() as cursor:
            cursor.execute("SELECT * FROM your_table")
            result = cursor.fetchall()
            return str(result)
    finally:
        connection.close()

if __name__ == '__main__':
    from gevent.pywsgi import WSGIServer
    http_server = WSGIServer(('0.0.0.0', 5000), app)
    http_server.serve_forever()

为什么选PyMySQL?

  1. 纯Python实现,gevent的monkey patch能完全接管它的socket操作
  2. 不需要额外的C扩展,部署更简单
  3. 社区活跃,文档完善

不推荐mysqlclient(MySQLdb),因为它是C扩展,gevent的monkey patch无法完全处理它,可能会导致阻塞。

如果你需要更高的性能,可以考虑aiomysql,但那是为asyncio设计的,需要配合异步框架(如aiohttp、FastAPI)使用,在gevent+flask的传统组合中,PyMySQL是最稳妥的选择。

总结:直接用PyMySQL就行。

官方的 mysql-connector 吧,生产环境用了很长时间了

你是用的 pymysql ?有没有出什么问题?

你用的什么?

mysql-connector 生产环境 ok ,就是 connection pool 有点蠢 size 是死的不是很好处理,想要灵活连接池重用得自己写。

mysql-connector 到底是哪个库?

用 pymysql 才能和 gevent 配合

兼容的 MySQLdb 可以用豆瓣的 greenify+patch 后的 MySQLdb,不过貌似不维护了
原来也用过 ultramysql,有坑也不维护了
生产环境还是选 pure python 实现

回到顶部