【Flask】Flask数据迁移操作

Flask数据迁移操作

前提条件

安装第三方包:

# ORM
pip install flask-sqlalchemy
# 数据迁移
pip install flask-migrate
# MySQL驱动
pip install pymysql
# 安装失败,指定如下镜像源即可
# pip install flask-sqlalchemy https://pypi.tuna.tsinghua.edu.cn/simple/
# pip install flask-migrate -i https://pypi.tuna.tsinghua.edu.cn/simple/
# pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple/

配置数据库:

# 这里先使用sqlite数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///market.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

迁移操作

创建迁移文件夹:

flask db init       # 创建迁移文件夹migrates,只调用一次

这一步可能会出现如下的错误,这是因为 Flask 没有找到我们创建的 app

执行如下步骤:

# windows环境设置FLASK_APP
$env:FLASK_APP="run.py"
flask db init

执行后,在项目目录下生成了 migrations 目录。

生成迁移文件

flask db migrate

执行这一步,有如下报错产生:

跟踪代码,发现其中一个地方 current_app.extensions['migrate'].db.get_engine() 但是这的 current_app.extensions['migrate'].dbNone,因此产生了报错。

stackoverflow 有一个相同的报错:python 3.x - Flask migration fails - Stack Overflow,这里是没有给 migrate.init_app() 传入 db 参数,检查后,项目中确实少传了参数,修改项目代码为如下:

__init__.py 中写入数据迁移的相关操作。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
​
app = Flask(__name__)
# 配置数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///market.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
​
db = SQLAlchemy()
migrate = Migrate()
# 这里需要导入要初始化的模型文件,否则可能无法生成迁移文件
from market.models import Item
# 初始化插件
db.init_app(app)
migrate.init_app(app, db)

修改后,再次执行迁移文件的操作,在 migrations\version 下生成了迁移文件。

执行迁移文件的升级操作:

flask db upgrade

打开数据库工具,数据库已经迁移成功。

执行数据库降级操作,撤销该次的升级操作。

flask db downgrade

打开数据库,本次迁移创建的数据表已撤销。

总结

  1. 数据库的模型迁移操作涉及的基本包有:

    # ORM
    pip install flask-sqlalchemy
    # 数据迁移
    pip install flask-migrate

  2. 数据库的模型迁移需要创建的代码有:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_migrate import Migrate
    ​
    app = Flask(__name__)
    # 配置数据库
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///market.sqlite'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    ​
    db = SQLAlchemy()
    migrate = Migrate()
    # 这里需要导入要初始化的模型文件,否则可能无法生成迁移文件
    from market.models import Item
    # 初始化插件
    db.init_app(app)
    migrate.init_app(app, db)

  3. 数据库模型的迁移操作:

    # 设置FLASK_APP环境变量
    $env:FLASK_APP="run.py"
    # 初始化迁移目录,仅需一次操作
    flask db init
    # 生成迁移文件
    flask db migrate
    # 执行迁移操作
    flask db upgrade
    # 撤回迁移操作
    flask db downgrade

  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Flask-Migrate进行数据迁移,你需要按照以下步骤进行设置: 1. 首先,确保你的项目中已经安装了Flask-Migrate扩展。你可以使用以下命令进行安装: ``` pip install Flask-Migrate ``` 2. 在你的Flask应用中,导入`Flask`、SQLAlchemy`和`Migrate`: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate ``` 3. 创建一个Flask应用: ```python app = Flask(__name__) ``` 4. 配置数据库连接信息,并将其添加到Flask应用的配置中。例如,如果你使用SQLite数据库,可以使用以下配置: ```python app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///your-database-file.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False ``` 5. 初始化SQLAlchemy和Migrate对象,并将它们绑定到Flask应用: ```python db = SQLAlchemy(app) migrate = Migrate(app, db) ``` 6. 创建一个迁移仓库,通过运行以下命令在你的项目根目录中创建一个`migrations`文件夹: ``` flask db init ``` 7. 创建一个初始迁移脚本,通过运行以下命令生成一个初始的迁移脚本: ``` flask db migrate -m "Initial migration" ``` 8. 应用迁移脚本,通过运行以下命令将迁移脚本应用到数据库中: ``` flask db upgrade ``` 现在,你的项目已经设置好了使用Flask-Migrate进行数据迁移。你可以通过运行`flask db migrate`命令创建新的迁移脚本,然后通过运行`flask db upgrade`命令将脚本应用到数据库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值