掘金 后端 ( ) • 2024-05-06 14:31

1.首先,创建一个新的文件,比如命名为 database.py,在这个文件中配置数据库和迁移:

# database.py
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

db = SQLAlchemy()
migrate = Migrate()

def create_tables_if_not_exists(app):
    """如果表不存在,则创建表"""
    with app.app_context():
        db.create_all()
        print("Tables created successfully if they didn't exist.")

def init_database(app):
    """初始化数据库和迁移工具,并检查创建表"""
    db.init_app(app)
    migrate.init_app(app, db)
    # 根据需要决定是否调用以下函数
    create_tables_if_not_exists(app)

在上面代码中,SQLAlchemy和Migrate的实例先于应用被创建,并且没有直接与应用绑定。之后,我们使用db.init_app(app)和migrate.init_app(app, db)来将它们与Flask应用关联起来。这种方式使得代码结构更清晰,同时也便于在不同的配置或环境中重用数据库和迁移的设置。注意,尽管示例中保留了在create_tables_if_not_exists中创建表的逻辑,实际最佳实践是完全依赖于flask db upgrade命令来管理数据库变更。

如果希望在应用启动时自动检查并创建数据库表(虽然这不是最佳实践,但在某些开发场景下可能会用到),你可以选择性地保留创建表的逻辑。但请记住,生产环境中应当主要依赖数据库迁移来管理表结构的变化。

2.然后,在你的主应用文件中(例如 app.py),引入并使用这个新模块来配置数据库:

# app.py
from flask import Flask
from .database import init_database

app = Flask(__name__)

# 配置数据库连接和其他设置
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 初始化数据库及检查创建表
init_database(app)

# 定义你的模型、路由等其他应用组件...

if __name__ == '__main__':
    app.run(debug=True)

3.安装虚拟环境,安装依赖,运行项目

(1)创建虚拟环境:

python -m venv env

(2)进入虚拟环境并运行:

Windows: 
    cmd: 进入虚拟环境目录env  运行:Scripts\activate
    powershell:进入虚拟环境目录env 运行: .\Scripts\Activate.ps1
 mac:source ./env/bin/activate

(3)关闭虚拟环境:

deactivate 各个系统都一个指令

(4)创建requirements文件

pip3 freeze > requirements.txt

(5)安装依赖

pip3 install -r requirements.txt

(6)运行项目

flask run

4.使用Flask-Migrate进行数据库表创建和管理的基本步骤:

  • 初始化迁移环境 首先,你需要在项目根目录下初始化迁移环境。这只需要执行一次:

    flask db init 这会在你的项目中创建一个migrations目录,用于存放迁移脚本。

  • 生成迁移脚本 每当你的模型有变动时(比如新增了User模型),你应该生成一个新的迁移脚本:

    flask db migrate 这个命令会比较你的模型定义和当前数据库的状态,生成一个迁移脚本。

  • 应用迁移 最后,应用这个迁移来实际创建或修改数据库表:

    flask db upgrade 这个命令执行迁移脚本,从而在数据库中创建或更新表结构。