ModuleNotFoundError: No module named 'flask._compat'

Flask 2.0以上的版本已经移除_compat这个模块,所以与Flask-Script不在兼容。flask_script库已经4年多没有进行更新了,而且该作者也在issue上表示过不再对这个库后续进行维护,取而代之的是Flask内置的cli库已经替代了这个manager的命令行管理机制


**

如果不想做此更新,可以指定安装库的版本继续下去

**
以下是requirements.txt参考

alembic1.4.2
aniso86019.0.1
APScheduler3.7.0
attrs22.1.0
certifi2022.9.24
chardet3.0.4
click8.1.3
colorama0.4.5
elasticsearch7.17.6
et-xmlfile1.1.0
Flask==1.1.2
Flask-Cors3.0.3
**Flask-Migrate2.5.3**
Flask-RESTful0.3.7
**Flask-Script2.0.6**
Flask-SQLAlchemy==2.4.4
fluent-logger0.9.6
idna2.8
importlib-metadata5.0.0
**itsdangerous1.1.0**
jdcal1.4.1
Jinja22.11.3
jsonpointer2.2
jsonschema3.0.1
Mako1.2.3
**MarkupSafe2.0.1**
msgpack0.6.2
openpyxl2.4.8
PyMySQL0.9.3
pyrsistent0.18.1
python-dateutil2.8.2
python-editor1.0.4
pytz2022.4
PyYAML5.1.2
requests2.22.0
six1.16.0
SQLAlchemy1.3.23
SQLAlchemy-Utils0.36.5
typing_extensions4.4.0
tzlocal2.1
urllib31.25.11
Werkzeug1.0.1
xlrd1.2.0
xlwt1.3.0
zipp==3.9.0

首先要在虚拟环境中安装Flask-Migrate(记得指定版本)。

pip install flask-migrate==2.5.3

flask-migrate是基于alembic进行的一个封装,并集成到flask中,而所有的迁移操作其实都是alembic做的,它能跟踪模块的变化,并将变化映射到数据库中。
First
manage.py

from flask import Flaskfrom flask_migrate import Migrate,MigrateCommand
from flask_script import Shell,Manager
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
manager = Manager(app)app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@127.0.0.1:3306/db_name?charset=utf8mb4'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Truedb = SQLAlchemy(app)#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db)#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command('db',MigrateCommand)class Role(db.Model):# 定义表名__tablename__ = 'roles'# 定义列对象id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(64), unique=True)email = db.Column(db.String(64), unique=True)age = db.Column(db.String(64), unique=True)def __repr__(self):return 'Role:'.format(self.name)#定义用户
class User(db.Model):__tablename__ = 'users'id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(64), unique=True, index=True)def __repr__(self):return 'User:'.format(self.username)
if __name__ == '__main__':manager.run()

创建迁移仓库

python manage.py db init

创建迁移脚本(双引号)

python manage.py db migrate -m "initial migration"

更新数据库

python manage.py db upgrade

回退数据库

python manage.py db downgrade 版本号

Second
manage.py


from flask import Flaskfrom flask_migrate import Migrate,MigrateCommand
from flask_script import Shell,Managerimport models.users   #这个一定要导入(表)
from exts import dbapp = Flask(__name__)
manager = Manager(app)app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:tsq123@127.0.0.1:3306/leqi?charset=utf8mb4'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db)#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command('db',MigrateCommand)if __name__ == '__main__':manager.run()

users.py

from exts import dbclass User(db.Model):__tablename__ = 'user'id = db.Column(db.Integer,primary_key=True,autoincrement=True)username = db.Column(db.String(50),nullable=False)

exts.py(防止循环引用报错)

from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()

目录结构

创建迁移仓库
创建迁移脚本
更新数据库
回退数据库

Third
manage.py

from flask_script import Manager
from run import app
from exts import db
import models.users   #这个一定要导入
from flask_migrate import Migrate,MigrateCommandmanager = Manager(app)
#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db)
#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command("db",MigrateCommand)   #把所有命令放到db里面if __name__ == '__main__':manager.run()

users.py

from exts import dbclass User(db.Model):__tablename__ = 'user'id = db.Column(db.Integer,primary_key=True,autoincrement=True)username = db.Column(db.String(50),nullable=False)

config.py

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:password@127.0.0.1:3306/db_name?charset=utf8mb4'

exts.py(防止循环引用报错)

from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()

run.py

from flask import Flask
from exts import db
import configapp = Flask(__name__)
app.config.from_object(config)
# app.config['SQLALCHEMY_DATABASE_URI'] =  'mysql+pymysql://root:tsq123@127.0.0.1:3306/leqi?charset=utf8mb4'
db.init_app(app)@app.route('/')
def hello_world():return 'Hello World!'if __name__ == '__main__':app.run()

目录结构

**

更新

**
所需库的版本
Flask>=2.0.0
Flask-Migrate>=3.0.0

app.py

from flask import Flask
from flask_migrate import Migrateapp = Flask(__name__)# 让迁移时,app和db建立关联
Migrate(app,db)if __name__ == '__main__':app.run()

最新的命令行如下:

flask db initflask db migrateflask db upgrade

flask-migrate(flask_script与flask2.0不再兼容)相关推荐

  1. Flask插件---flask_script与flask_migrate

    Flask插件---flask_script与flask_migrate import app from flask_script import Manager from flask_migrate ...

  2. [vue] vue2.0不再支持v-html中使用过滤器了怎么办?

    [vue] vue2.0不再支持v-html中使用过滤器了怎么办? 在method中定义方法 htmlFilter(htmlString){ return htmlString.replace(/+s ...

  3. impdp 不兼容_oracle - Oracle:使用impdp导入数据库转储时出错:Data Pump客户端与数据库版本12.1.0.2.0不兼容 - 堆栈内存溢出...

    我们从Oracle DB v12创建了一个数据库转储. 1使用expdp(导出数据泵)v12.1实用程序,现在我想将其导入另一个DB v12. 1使用impdp(导入数据泵)工具. 对于杂项. 我需要 ...

  4. SQLAlchemy 基础知识 - (autoflush 和 autocommit)(relationship 和 backref)(flask migrate迁移数据)

    全栈工程师开发手册 (作者:栾鹏) python教程全解 SQLAlchemy 基础 下面是一段官方 SQLAlchemy 使用示例,我们从这个例子出发,认识 SQLAlchemy. from sql ...

  5. win8运行matlab7.0,Win8.1系统中matlab7.0不兼容的解决方法

    Win8.1系统中matlab7.0不兼容的解决方法 作者:深度技术员 文章来源:未知 发布时间:2018-02-23 15:08 matlab7.0是一款商业数学软件,很多win8.1系统由于学习或 ...

  6. 测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议

    DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议 深圳聚积智能 夏先生 13246760327   QQ 349098308 ■IEC62386-102(V2.0)通过测试内容 IE ...

  7. Flask——migrate实现数据库迁移

    migrate实现数据库迁移的指令如下: 指令 代码 说明 初始化 python 文件名.py db init 这个命令会创建migrations文件夹,所有迁移文件都放在里面 创建迁移脚本 pyth ...

  8. python画鱼教程_Python Flask高级编程之从0到1开发《鱼书》精品项目 学习 教程??

    一 .安装环境 我们使用 flask web框架,并用 sqlalchemy来做数据库映射,并使用 migrate做数据迁移. $ pip install flask $ pip install SQ ...

  9. Android10.0 版本兼容

    减法,减法,继续减法,因为前俩年做物联网设备,设备Android版本普遍都在5.0左右,所以很少有版本兼容适配的需求:但是在逝去的那一年,我也做过和了解过一点关于10.0的适配工作,索性现在有机会就一 ...

最新文章

  1. MySQL之简单示例
  2. 手把手教你利用hexo搭建自己的博客网站----史上完整详细版(基于GitHub for mac)
  3. 2560x1600分辨率高吗_手机屏幕分辨率真的越高越好?它的好处和坏处你知道吗?...
  4. java 实现图片上传功能
  5. 基于Hexo搭建博客
  6. JAVA并发编程: CAS和AQS
  7. OpenCv的连通域操作
  8. 解决ng界面长表达式(ui-set)
  9. 新基建时代,腾讯云数据库沿主赛道加速演进
  10. 【Flink】No key set. This method should not be called outside of a keyed context.
  11. c++ hsv 红色范围_维生素C的定量测定—2,6二氯酚靛酚法
  12. string的各种函数(系统学习)
  13. JavaScript学习(三十九)—对象中内容的操作
  14. Matlab 图像预处理
  15. AD中按Y使器件竖直方向上镜像翻转
  16. tornado, twister, cyclone,Typhoon,hurricane…到底如何区别?
  17. 江苏省2022年普通高校专转本选拔考试 计算机专业大类专业综合基础理论 试题卷
  18. 今天来聊一聊互联网35岁梗,这个行业真的不需要35岁以上从业人员?
  19. anemometer mysql5.6_slowlog分析anemometer平台搭建
  20. IDEA中创建编写JSP

热门文章

  1. HTML 制作简单的导航栏
  2. FL Studio水果中文版V20.8电脑系统配置要求
  3. 前端三剑客HTML学习笔记
  4. 2008-1-14 《软件工程》课后习题解答...
  5. Python 算两个日期之间_天数差
  6. 阿里云OSS PicGo 配置图床教程 超详细
  7. 《javascript语言精粹》读书笔记——函数
  8. FTP 基础配置,配置虚拟FTP账号
  9. 康永,给残酷社会的善意短信
  10. matlab经典教程分享