【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:[email protected]: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 。

你可能感兴趣的:(flask,数据库,python)