Flask 数据库迁移 flask-migrate

网友投稿 842 2022-11-21

Flask 数据库迁移 flask-migrate

Flask 数据库迁移  flask-migrate

数据库迁移

在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。

更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。

在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。

为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。

首先要在虚拟环境中安装Flask-Migrate。

pip3 install flask-migrate

编写数据库定义模型类:db_database.py

from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyimport pymysqlpymysql.install_as_MySQLdb()from flask_migrate import Migrate,MigrateCommandfrom flask_script import Shell,Managerapp = Flask(__name__)manager = Manager(app)class Config(object): """配置参数""" # 设置连接数据库的URL user = 'root' password = '*****************' database = 'flask_ex' app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://%s:%s@127.0.0.1:3306/%s' % (user,password,database) # 设置sqlalchemy自动更跟踪数据库 SQLALCHEMY_TRACK_MODIFICATIONS = True # 查询时会显示原始SQL语句 # app.config['SQLALCHEMY_ECHO'] = True # 禁止自动提交数据处理 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = False # 设置密钥,用于csrf_token的加解密 app.config["SECRET_KEY"] = "xhosd6f982yfhowefy29f"# 读取配置app.config.from_object(Config)# 创建数据库sqlalchemy工具对象db = SQLAlchemy(app)#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例migrate = Migrate(app,db)#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令manager.add_command('db',MigrateCommand)#定义模型类-作者class Author(db.Model): __tablename__ = 'author' id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(32),unique=True) email = db.Column(db.String(64)) au_book = db.relationship('Book',backref='author') def __str__(self): return 'Author:%s' %self.name#定义模型类-书名class Book(db.Model): __tablename__ = 'books' id = db.Column(db.Integer,primary_key=True) info = db.Column(db.String(32),unique=True) leader = db.Column(db.String(32)) au_book = db.Column(db.Integer,db.ForeignKey('author.id')) def __str__(self): return 'Book:%s,%s'%(self.info,self.leader)if __name__ == '__main__': # 通过管理对象来启动flask manager.run()

创建迁移仓库

#这个命令会创建migrations文件夹,所有迁移文件都放在里面。python3 db_database.py db init

创建迁移脚本

自动创建迁移脚本有两个函数,​​upgrade()​​​函数把迁移中的改动应用到数据库中。​​downgrade()​​​函数则将改动删除。 自动创建的迁移脚本会根据模型定义和数据库当前状态的差异,生成​​​upgrade()​​​和​​downgrade()​​​函数的内容。 对比不一定完全正确,有可能会遗漏一些细节,需要进行检查

#创建自动迁移脚本python3 db_database.py db migrate -m "initial migration"

更新数据库

python3 db_database.py db upgrade

回退数据库

回退数据库时,需要指定回退版本号,由于版本号是随机字符串,为避免出错,建议先使用python3 db_database.py db history命令查看历史版本的具体版本号,然后复制具体版本号执行回退。

python3 db_database.py db downgrade 版本号

执行如下:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux之逻辑卷管理器
下一篇:使用Spring Data Jpa查询全部并排序
相关文章

 发表评论

暂时没有评论,来抢沙发吧~