Python中使用gevent+flask时,应该选择什么mysql驱动?
Mysqldb这个库好像不支持异步
如果都用的是这个库的话,不支持也没有办法。。
我也只能用 Mysql-python
Python中使用gevent+flask时,应该选择什么mysql驱动?
不用 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?
- 纯Python实现,gevent的monkey patch能完全接管它的socket操作
- 不需要额外的C扩展,部署更简单
- 社区活跃,文档完善
不推荐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 实现
pymysql?

