当前位置:首页 > 云服务器 > 正文

Flask如何生成数据库?,方法有哪些?

安装与配置

使用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等。

Flask如何生成数据库?,方法有哪些? 第1张

示例:用户模型

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()生成所有模型对应的表,此方法会检查表是否存在,若不存在则创建,但不会迁移已有表结构

Flask如何生成数据库?,方法有哪些? 第2张

生产环境推荐使用迁移,因为create_all无法处理模型变更。

数据库迁移(Flask-Migrate)

使用Flask-Migrate进行增量迁移,支持版本控制和回滚,初始化迁移仓库:

flask db init

生成迁移脚本(自动检测模型变化):

flask db migrate -m "initial migration"

应用迁移:

Flask如何生成数据库?,方法有哪些? 第3张

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即可应用,这种方式提供了对数据库变更的完全控制。

0