Flask如何生成数据库?,方法有哪些?
- 云服务器
- 2026-07-24
- 5
安装与配置
使用Flask生成数据库需要安装Flask-SQLAlchemy作为ORM,以及Flask-Migrate用于数据库迁移,通过pip安装:
pip install flask-sqlalchemy flask-migrate
在Flask应用中初始化扩展,并配置数据库连接,支持SQLite、MySQL、PostgreSQL等,URI格式如下:
| 数据库 | URI示例 |
|---|---|
| SQLite | sqlite:///site.db |
| MySQL | mysql+pymysql://user:password@localhost/dbname |
| PostgreSQL | postgresql://user:password@localhost/dbname |
配置代码示例:
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) migrate = Migrate(app, db)
定义模型
模型是Python类,继承自db.Model,每个类属性对应数据库表的一个字段,使用db.Column定义,常用字段类型包括db.String、db.Integer、db.DateTime等。

示例:用户模型
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) created_at = db.Column(db.DateTime, default=datetime.utcnow) def __repr__(self): return f'<User {self.username}>'
关系定义:使用db.relationship和db.ForeignKey建立关联,例如一对多关系:
class Post(db.Model): id = db.Column(db.Integer, primary_key=True)= db.Column(db.String(200), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) author = db.relationship('User', backref='posts')
创建数据库表
在Python交互环境或应用启动时,通过db.create_all()生成所有模型对应的表,此方法会检查表是否存在,若不存在则创建,但不会迁移已有表结构。

生产环境推荐使用迁移,因为create_all无法处理模型变更。
数据库迁移(Flask-Migrate)
使用Flask-Migrate进行增量迁移,支持版本控制和回滚,初始化迁移仓库:
flask db init
生成迁移脚本(自动检测模型变化):
flask db migrate -m "initial migration"
应用迁移:

flask db upgrade
迁移后,数据库结构会与模型同步,如需回滚:
flask db downgrade
常见问题与操作
- 在命令行中运行迁移命令前,需设置Flask应用环境变量:export FLASK_APP=app.py(Windows用set)。
- 若模型已存在且未使用迁移,可用db.create_all()初始化,但后续模型变更推荐切换到迁移模式。
- 清空数据库可使用db.drop_all(),但会删除所有数据。
相关问题与解答
问题1:Flask中如何生成数据库表而不使用迁移?
解答:可以在应用启动时调用db.create_all(),但前提是数据库尚不存在表,每次修改模型后,需要手动删除旧表或重新创建(db.drop_all() + db.create_all()),这会导致数据丢失,因此仅适合开发或测试环境,生产环境必须使用迁移工具(Flask-Migrate)来安全地更新表结构。
问题2:Flask-Migrate生成的迁移脚本存放在哪里?如何手动修改?
解答:迁移脚本默认存放在项目根目录下的migrations/versions/文件夹中,以时间戳命名,每个文件包含upgrade()和downgrade()函数,定义了表结构的变更,在flask db migrate生成后,可以打开脚本手动修改,例如添加自定义SQL、调整字段类型等,修改后执行flask db upgrade即可应用,这种方式提供了对数据库变更的完全控制。