Flask 中注册 SQLAlchemy
在 Flask 中注册 SQLAlchemy 有几种方式,最常见的是使用 Flask-SQLAlchemy 扩展。以下是详细步骤:
方法一:使用 Flask-SQLAlchemy(推荐)
1. 安装依赖
pip install Flask-SQLAlchemy
2. 基本注册方式
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# 创建 Flask 应用
app = Flask(__name__)
# 配置数据库 URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 避免警告
# 创建 SQLAlchemy 实例并注册到应用
db = SQLAlchemy(app)
3. 使用应用工厂模式(更推荐)
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# 全局创建 SQLAlchemy 实例
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
# 配置
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 初始化 SQLAlchemy
db.init_app(app)
return app
# 在应用中使用
app = create_app()
# 定义模型
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)
# 创建表
with app.app_context():
db.create_all()
方法二:直接使用 SQLAlchemy(不推荐用于 Flask)
如果你不想使用 Flask-SQLAlchemy,也可以直接使用原生 SQLAlchemy:
from flask import Flask
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base
app = Flask(__name__)
# 数据库配置
DATABASE_URL = 'sqlite:///example.db'
# 创建引擎
engine = create_engine(DATABASE_URL, echo=True)
# 创建会话
db_session = scoped_session(sessionmaker(bind=engine))
# 创建基类
Base = declarative_base()
Base.query = db_session.query_property()
@app.teardown_appcontext
def shutdown_session(exception=None):
db_session.remove()
常用数据库 URI 示例
# SQLite(文件数据库)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///your_database.db'
# SQLite(内存数据库)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
# MySQL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/db_name'
# PostgreSQL
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://username:password@localhost/db_name'
完整示例
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
# 定义模型
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 to_dict(self):
return {'id': self.id, 'username': self.username, 'email': self.email}
# 创建表
with app.app_context():
db.create_all()
# 路由示例
@app.route('/users', methods=['POST'])
def create_user():
data = request.get_json()
user = User(username=data['username'], email=data['email'])
db.session.add(user)
db.session.commit()
return jsonify(user.to_dict()), 201
if __name__ == '__main__':
app.run(debug=True)
注意事项
- SQLALCHEMY_TRACK_MODIFICATIONS: 设置为
False可以避免内存开销和警告 - 应用上下文: 在应用工厂模式中,记得使用
app.app_context()来执行数据库操作 - 数据库迁移: 建议配合 Flask-Migrate 使用来进行数据库迁移管理
推荐使用 方法一的应用工厂模式,这样代码结构更清晰,也便于测试和部署。

浙公网安备 33010602011771号