引言
Flask 是一个轻量级的 Web 应用框架,而 MySQL 是一个流行的关系型数据库管理系统。将 Flask 与 MySQL 结合使用,可以构建出功能强大且性能稳定的 Web 应用。本文将深入探讨 Flask 与 MySQL 的高效交互方法,包括数据库连接、查询执行、数据操作以及如何处理数据库连接池等问题。
一、环境准备
在开始之前,确保以下环境已准备就绪:
- Python 3.x
- Flask 1.1.2 或更高版本
- MySQL 5.7 或更高版本
- MySQL 驱动:
mysqlclient或PyMySQL
1. 安装 Flask
pip install Flask
2. 安装 MySQL 驱动
pip install mysqlclient # 或 PyMySQL
二、数据库连接
1. 创建数据库连接
使用 Flask 的扩展 Flask-SQLAlchemy 来管理数据库连接。以下是一个简单的例子:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
这里,username、password、localhost 和 dbname 分别是 MySQL 的用户名、密码、服务器地址和数据库名。
2. 测试数据库连接
@app.route('/')
def index():
try:
db.session.execute('SELECT 1')
return 'Database connection successful!'
except Exception as e:
return f'Database connection failed: {e}'
运行 Flask 应用,访问首页即可测试数据库连接是否成功。
三、执行查询
1. 使用原生 SQL 查询
@app.route('/select')
def select():
result = db.session.execute('SELECT * FROM users')
for row in result:
print(row)
return 'Select query executed successfully!'
2. 使用 ORM 查询
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)
@app.route('/select_orm')
def select_orm():
user = User.query.filter_by(username='john_doe').first()
if user:
print(user.username, user.email)
return 'ORM select query executed successfully!'
四、数据操作
1. 创建数据
@app.route('/create')
def create():
new_user = User(username='jane_doe', email='jane@example.com')
db.session.add(new_user)
db.session.commit()
return 'Create operation executed successfully!'
2. 更新数据
@app.route('/update')
def update():
user = User.query.filter_by(username='jane_doe').first()
if user:
user.email = 'jane_new@example.com'
db.session.commit()
return 'Update operation executed successfully!'
3. 删除数据
@app.route('/delete')
def delete():
user = User.query.filter_by(username='jane_doe').first()
if user:
db.session.delete(user)
db.session.commit()
return 'Delete operation executed successfully!'
五、数据库连接池
1. 配置连接池
app.config['SQLALCHEMY_POOL_SIZE'] = 10
app.config['SQLALCHEMY_MAX_OVERFLOW'] = 20
2. 连接池管理
Flask-SQLAlchemy 会自动管理连接池,无需手动干预。
六、总结
通过本文的介绍,相信您已经掌握了 Flask 与 MySQL 的高效交互方法。在实际开发中,根据需求灵活运用这些技术,可以构建出功能强大且性能稳定的 Web 应用。祝您开发愉快!
