flask-migrate(flask_script与flask2.0不再兼容)
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不再兼容)相关推荐
- Flask插件---flask_script与flask_migrate
Flask插件---flask_script与flask_migrate import app from flask_script import Manager from flask_migrate ...
- [vue] vue2.0不再支持v-html中使用过滤器了怎么办?
[vue] vue2.0不再支持v-html中使用过滤器了怎么办? 在method中定义方法 htmlFilter(htmlString){ return htmlString.replace(/+s ...
- impdp 不兼容_oracle - Oracle:使用impdp导入数据库转储时出错:Data Pump客户端与数据库版本12.1.0.2.0不兼容 - 堆栈内存溢出...
我们从Oracle DB v12创建了一个数据库转储. 1使用expdp(导出数据泵)v12.1实用程序,现在我想将其导入另一个DB v12. 1使用impdp(导入数据泵)工具. 对于杂项. 我需要 ...
- SQLAlchemy 基础知识 - (autoflush 和 autocommit)(relationship 和 backref)(flask migrate迁移数据)
全栈工程师开发手册 (作者:栾鹏) python教程全解 SQLAlchemy 基础 下面是一段官方 SQLAlchemy 使用示例,我们从这个例子出发,认识 SQLAlchemy. from sql ...
- win8运行matlab7.0,Win8.1系统中matlab7.0不兼容的解决方法
Win8.1系统中matlab7.0不兼容的解决方法 作者:深度技术员 文章来源:未知 发布时间:2018-02-23 15:08 matlab7.0是一款商业数学软件,很多win8.1系统由于学习或 ...
- 测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议
DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议 深圳聚积智能 夏先生 13246760327 QQ 349098308 ■IEC62386-102(V2.0)通过测试内容 IE ...
- Flask——migrate实现数据库迁移
migrate实现数据库迁移的指令如下: 指令 代码 说明 初始化 python 文件名.py db init 这个命令会创建migrations文件夹,所有迁移文件都放在里面 创建迁移脚本 pyth ...
- python画鱼教程_Python Flask高级编程之从0到1开发《鱼书》精品项目 学习 教程??
一 .安装环境 我们使用 flask web框架,并用 sqlalchemy来做数据库映射,并使用 migrate做数据迁移. $ pip install flask $ pip install SQ ...
- Android10.0 版本兼容
减法,减法,继续减法,因为前俩年做物联网设备,设备Android版本普遍都在5.0左右,所以很少有版本兼容适配的需求:但是在逝去的那一年,我也做过和了解过一点关于10.0的适配工作,索性现在有机会就一 ...
最新文章
- MySQL之简单示例
- 手把手教你利用hexo搭建自己的博客网站----史上完整详细版(基于GitHub for mac)
- 2560x1600分辨率高吗_手机屏幕分辨率真的越高越好?它的好处和坏处你知道吗?...
- java 实现图片上传功能
- 基于Hexo搭建博客
- JAVA并发编程: CAS和AQS
- OpenCv的连通域操作
- 解决ng界面长表达式(ui-set)
- 新基建时代,腾讯云数据库沿主赛道加速演进
- 【Flink】No key set. This method should not be called outside of a keyed context.
- c++ hsv 红色范围_维生素C的定量测定—2,6二氯酚靛酚法
- string的各种函数(系统学习)
- JavaScript学习(三十九)—对象中内容的操作
- Matlab 图像预处理
- AD中按Y使器件竖直方向上镜像翻转
- tornado, twister, cyclone,Typhoon,hurricane…到底如何区别?
- 江苏省2022年普通高校专转本选拔考试 计算机专业大类专业综合基础理论 试题卷
- 今天来聊一聊互联网35岁梗,这个行业真的不需要35岁以上从业人员?
- anemometer mysql5.6_slowlog分析anemometer平台搭建
- IDEA中创建编写JSP