使用 SQLAlchemy 操作数据库
使用 SQLAlchemy 进行 ORM 映射与数据库访问,推荐搭配 Flask-Migrate 管理迁移。
安装:
初始化扩展:
应用工厂注册:
定义模型:
基本操作:
事务与回滚:
提示:在视图中避免直接写业务逻辑,抽到 service/dao 层以便测试;复杂查询使用 SQLAlchemy Core/ORM 组合。
使用 SQLAlchemy 进行 ORM 映射与数据库访问,推荐搭配 Flask-Migrate 管理迁移。
安装:
pip install flask-sqlalchemy flask-migrate初始化扩展:
# app/extensions.py
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
db = SQLAlchemy()
migrate = Migrate()应用工厂注册:
# 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定义模型:
# 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())基本操作:
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()事务与回滚:
try:
# 多表写入
db.session.commit()
except Exception:
db.session.rollback()
raise提示:在视图中避免直接写业务逻辑,抽到 service/dao 层以便测试;复杂查询使用 SQLAlchemy Core/ORM 组合。