Database with SQLAlchemy
使用 SQLAlchemy 进行 ORM 映射与数据库访问,推荐搭配 Flask-Migrate 管理迁移。
安装:
bash
pip install flask-sqlalchemy flask-migrate初始化扩展:
python
# app/extensions.py
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
db = SQLAlchemy()
migrate = Migrate()应用工厂注册:
python
# app/__init__.py
from .extensions import db, migrate
def create_app(config_object=None):
app = Flask(__name__)
app.config.from_mapping(SQLALCHEMY_DATABASE_URI="sqlite:///app.db",
SQLALCHEMY_TRACK_MODIFICATIONS=False)
db.init_app(app)
migrate.init_app(app, db)
return app定义模型:
python
# app/models.py
from .extensions import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120), unique=True, nullable=False)
name = db.Column(db.String(80))
created_at = db.Column(db.DateTime, server_default=db.func.now())基本操作:
python
u = User(email="a@ex.com", name="Alice")
db.session.add(u)
db.session.commit()
user = User.query.filter_by(email="a@ex.com").first()
user.name = "Alice Chen"
db.session.commit()事务与回滚:
python
try:
# 多表写入
db.session.commit()
except Exception:
db.session.rollback()
raise提示:在视图中避免直接写业务逻辑,抽到 service/dao 层以便测试;复杂查询使用 SQLAlchemy Core/ORM 组合。