【Flask 连接数据库,使用Flask-Migrate实现数据库迁移及问题汇总】

Flask 连接数据库,使用Flask-Migrate实现数据库迁移

安装Flask-Migrate插件
pip listall Flask-Migrate

# 安装失败使用以下方式安装
pip install –i https://pypi.tuna.tsinghua.edu.cn/simple flask-migrate

使用Flask-Migrate步骤

app.py主要用于数据库连接

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 连接数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@127.0.0.1:3306/flask_test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)


@app.route('/')
def index():
    return "Hello!"


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

model.py 中导入了db,作用是存储一个User类,用于生成表头。

# _*_ coding: utf-8 _*_
"""
Time:     2024/1/15 9:37
Author:   Bana_lv
Version:  V 0.1
File:     model.py

"""
from app import db

class User(db.Model):
    user_id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(60), nullable=False)
    password = db.Column(db.String(30), nullable=False)

manager.py用于数据迁移管理,运行后将生成一个文件夹。

# _*_ coding: utf-8 _*_
"""
Time:     2024/1/15 9:37
Author:   Bana_lv
Version:  V 0.1
File:     manager.py

"""
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from app import app, db

migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

if __name__ == "__main__":
    manager.run()

Flask-Migrate运行

初始化一个迁移脚本的环境
python manager.py db init
数据库的创建。
python manager.py db migrate
数据更新
python manager.py db upgrade

问题汇总

问题一:flask_migrate无法导入MigrateCommand【解决方法】
原因:Flask-Migrate 3.1.0 版本过高导致;
解决方法:降低版本即可。

pip install -i https://pypi.douban.com/simple/ --upgrade Flask-Migrate==2.7.0

问题二:ImportError: cannot import name ‘_request_ctx_stack‘ from ‘flask‘

解决方法
修改 [你的虚拟环境]\Lib\site-packages\flask_script\commands.py
from flask import request_ctx_stack 改为 from flask import request_ctx
修改 [你的虚拟环境]\Lib\site-packages\flask_init
.py
导入 from .globals import _no_app_msg, request_ctx

问题三:ModuleNotFoundError: No module named ‘flask._compat‘

原因分析:

ModuleNotFoundError: No module named 'flask._compat

ctrl+左键 查看manager查看源码,找到from flask._compat import text_type这行,按ctrl进行查看,显示找不到文件,Flask 2.0.0版本修改了。

Flask版本过高问题:flask里面的 ._compat.py文件没有,降低版本即可。

pip3 install flask==1.1.2

不降级则可以尝试修改一下

flask_script/__init__.py中from ._compat import text_type 改成 from flask_script._compat import text_type 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值