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 。