1. Flask与SQLAlchemy的黄金组合
十年前我刚接触Web开发时,手动拼接SQL字符串是常态,直到遇见SQLAlchemy这款Python界的ORM神器。当它与Flask这个轻量级框架相遇时,就像咖啡找到了最配它的那杯奶。不同于Django自带ORM的"全家桶"式方案,Flask+SQLAlchemy的组合给了开发者更多自由选择的空间。
在实际项目中,这套组合能解决几个关键痛点:一是避免裸写SQL导致的安全隐患(还记得那些年我们经历过的SQL注入吗?);二是用Python对象操作数据库的优雅体验;三是数据库迁移的版本化管理。我经手过的电商后台、内容管理系统,八成以上都采用这个技术栈。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础配置与模型定义
2.1 初始化配置
先安装核心依赖(建议使用虚拟环境):
bash复制pip install flask-sqlalchemy flask-migrate
基础配置示例(config.py):
python复制class Config:
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://user:pass@localhost/dbname'
SQLALCHEMY_TRACK_MODIFICATIONS = False # 避免性能警告
SQLALCHEMY_ECHO = True # 调试时显示SQL语句
在Flask应用工厂中初始化:
python复制from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
db = SQLAlchemy()
migrate = Migrate()
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
db.init_app(app)
migrate.init_app(app, db)
return app
关键细节:SQLAlchemy的连接池默认维持5个连接,高并发场景需要调整POOL_SIZE参数。我在某次促销活动时因为没设置这个参数,导致数据库连接被耗尽。
2.2 模型定义规范
用户模型的经典示例:
python复制from datetime import datetime
class User(db.Model):
__tablename__ = 'users' # 显式声明表名
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), index=True) # 建立索引提高查询效率
created_at = db.Column(db.DateTim
