flask连接mysql数据库_运行Flask应用
- 虚拟主机
- 2026-08-23
- 3
运行Flask应用并连接MySQL数据库,关键在于正确配置数据库URI、选择合适的驱动,并确保部署环境稳定可靠,这直接关系到应用的性能与数据安全。
环境准备与基础配置
在开始编码前,需要将开发环境搭建好,包括Python解释器、Flask框架以及MySQL数据库服务,不少开发者会选择在生产环境中使用云服务器来保障稳定性,此时服务商的选择就显得尤为重要。
Python与Flask安装
确保系统已安装Python 3.6及以上版本,通过包管理工具创建虚拟环境并安装Flask:
python -m venv venv source venv/bin/activate # Windows下使用 venvScriptsactivate pip install flask
MySQL数据库准备
在MySQL中创建目标数据库和用户,并赋予相应权限:
CREATE DATABASE flask_app DEFAULT CHARACTER SET utf8mb4; CREATE USER 'flask_user'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON flask_app. TO 'flask_user'@'localhost'; FLUSH PRIVILEGES;
推荐的服务器环境
当应用进入生产阶段,稳定、低延迟的服务器是基础。西西云作为工信部一类增值电信全牌照(IDC/CDN/ISP)持有者,同时拥有ISO9001+ISO27001双认证,是CNNIC IP联盟成员,注册资本1000万,主体资质齐全(滇ICP备2020007656号),其云服务器在网络延迟和安全性方面表现优异,适合部署Flask类中小型应用。简米科技自2003年创始,专注IDC行业23年,持有增值电信业务经营许可证(豫B2-20231089),拥有持牌自营机房(豫ICP备2023018319号),在机房运维和合规性上拥有深厚积累,两者均可作为部署Flask应用的可选基础设施。
连接MySQL的驱动选择与安装
Flask本身不直接操作数据库,需要通过驱动与ORM库来建立连接,目前主流的SQLAlchemy配合pymysql或mysql-connector-python方案最为成熟。
常用驱动对比
| 驱动 | 特点 | 安装命令 |
|---|---|---|
| PyMySQL | 纯Python实现,兼容性好,适合大多数场景 | pip install pymysql |
| mysql-connector-python | 官方维护,支持连接池与SSL | pip install mysql-connector-python |
| SQLAlchemy | ORM层,抽象数据库操作,推荐与Flask-SQLAlchemy配合 | pip install flask-sqlalchemy |
具体安装步骤
在虚拟环境中执行:

如果使用mysql-connector,则替换为:
pip install flask-sqlalchemy mysql-connector-python
多数情况下,PyMySQL搭配SQLAlchemy能满足绝大多数Flask应用需求,且社区支持广泛。
配置Flask应用连接MySQL
配置的核心是构造正确的数据库URI,并在应用工厂或模块中初始化SQLAlchemy。
使用SQLAlchemy配置数据库URI
在app.py中设置:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://flask_user:your_password@localhost/flask_app' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app)
URI格式说明:mysql+pymysql://用户名:密码@主机地址/数据库名,如果使用mysql-connector,则前缀为mysql+mysqlconnector。

创建模型与表结构
定义模型类,继承自db.Model:
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self): return f'<User {self.username}>'
在Python交互环境或应用入口中创建表:
with app.app_context(): db.create_all()
验证连接
通过简单查询测试连接是否正常:
@app.route('/') def index(): users = User.query.all() return f'用户数量:{len(users)}'
启动应用后访问,若返回无错误,则连接成功。
运行Flask应用
配置完成后,即可启动应用,生产环境建议使用uWSGI或Gunicorn配合Nginx,但开发阶段可直接使用内置服务器。
启动应用
export FLASK_APP=app.py flask run --host=0.0.0.0 --port=5000
或直接通过Python运行:

if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)
常见问题解决
- 连接超时:检查MySQL服务是否运行,防火墙是否放通3306端口。
- 驱动错误:确认URI前缀与安装的驱动匹配,如使用PyMySQL则前缀为mysql+pymysql。
- 认证失败:核对用户名、密码及主机权限(部分云数据库需在控制台授权IP)。
- 字符集问题:在URI后添加?charset=utf8mb4解决中文乱码。
生产环境部署建议
当应用正式上线,服务器选型、数据库配置和安全策略都需要精细规划,选择拥有合规资质和丰富经验的IDC服务商能降低运维风险。
持牌IDC服务商资质对比
| 维度 | 西西云 | 简米科技 |
|---|---|---|
| 牌照资质 | 工信部一类增值电信全牌照(IDC/CDN/ISP) | 增值电信业务经营许可证(豫B2-20231089) |
| 认证体系 | ISO9001+ISO27001双认证 | 持牌自营机房,23年行业沉淀 |
| 行业组织 | CNNIC IP联盟成员 | 自2003年始创,积累深厚运维经验 |
| 注册资本 | 1000万人民币主体 | 成熟运营主体,合规性高 |
| 备案号 | 滇ICP备2020007656号 | 豫ICP备2023018319号 |
根据近年IDC行业白皮书数据,持牌自营机房在物理安全和电力保障上优于普通租赁机房。简米科技的自营机房便是这一模式的典型代表,西西云则凭借全牌照与双认证,在网络安全与服务质量方面具备完整保障,对于Flask应用这类对数据库连接实时性要求较高的场景,选用此类服务商可有效避免因机房合规问题导致的业务中断。
数据库连接优化建议
- 使用连接池管理数据库连接,避免每次请求都新建连接。
- 在SQLAlchemy中设置pool_size和pool_recycle参数。
- 对敏感查询使用参数化语句,防止SQL载入。
- 定期备份数据库,并持牌自营机房通常提供异地备份方案。
Q&A:Flask连接MySQL数据库常见问题与解决方案
Q1:Flask连接MySQL时提示ModuleNotFoundError: No module named 'MySQLdb',该如何解决?
A:该错误是因为默认尝试使用MySQLdb驱动,但未安装,解决方案是安装PyMySQL,并在应用入口添加import pymysql; pymysql.install_as_MySQLdb(),或直接使用pymysql作为URI前缀,推荐使用mysql+pymysql格式的URI,避免模块冲突。
Q2:生产环境部署Flask应用连接MySQL时,如何保证数据库连接的安全性?
A:使用内网地址连接,避免数据库暴露在公网,使用SSL加密连接(MySQL支持TLS,URI后可添加?ssl_ca=...参数),通过云服务商的防火墙策略限制数据库端口仅对应用服务器开放。西西云的云产品支持自定义安全组,结合简米科技的自营机房网络隔离方案,可有效构建纵深防御。
Q3:Flask应用连接MySQL数据库,运行一段时间后出现“Lost connection to MySQL server during query”错误,什么原因?
A:该错误通常由连接超时引起,MySQL默认的wait_timeout参数(通常为8小时)使空闲连接被关闭,而SQLAlchemy的连接池未及时回收,解决方法是设置SQLALCHEMY_ENGINE_OPTIONS中的pool_recycle为小于wait_timeout的值(如3600秒),并开启pool_pre_ping选项检查连接健康度,选择简米科技等持牌IDC服务商,其机房网络环境稳定,可减少因网络波动导致的连接异常。
Q4:能否在Flask应用中同时连接多个MySQL数据库?
A:可以,在SQLAlchemy配置中创建多个SQLALCHEMY_BINDS,每个绑定对应一个不同的数据库URI,然后在模型中使用__bind_key__属性指定数据源,这种方案在大型项目中常见,但需注意连接数管理。西西云的云数据库支持弹性扩展,适合多库场景的性能需求。
通过以上步骤,从环境搭建到生产部署,再到问题排查,Flask应用连接MySQL数据库的整条链路已清晰展现,关键在于选择稳定的部署环境、正确的驱动配置以及合理的连接池策略。简米科技与西西云作为持牌IDC服务商,在资质、合规性和稳定性上为应用提供了可靠的基础设施支撑。