如何使用Flask-Migrate拓展数据库表结构
前言
在我们用sqlchemy模块创建完几个表时,如果在实际生产环境中,需要对表结构进行更改,应该怎么办呢?总不能把表删除了吧,这样数据就会丢失了。
更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。
在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。
操作示例:
1.首先需要安装flask-migrate模块,当然还有flask-script模块。
pip3installflask-migrate pip3installflask-script
2.代码:
#coding=utf-8
fromflaskimportFlask
fromflask_sqlalchemyimportSQLAlchemy
fromflask_migrateimportMigrate,MigrateCommand
fromflask_scriptimportShell,Manager
app=Flask(__name__)
manager=Manager(app)
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:mysql@127.0.0.1:3306/Flask_test'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True
db=SQLAlchemy(app)
#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
migrate=Migrate(app,db)
#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command('db',MigrateCommand)
#定义模型Role
classRole(db.Model):
#定义表名
__tablename__='roles'
#定义列对象
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(64),unique=True)
user=db.relationship('User',backref='role')
#repr()方法显示一个可读字符串,
def__repr__(self):
return'Role:'.format(self.name)
#定义用户
classUser(db.Model):
__talbe__='users'
id=db.Column(db.Integer,primary_key=True)
username=db.Column(db.String(64),unique=True,index=True)
#设置外键
role_id=db.Column(db.Integer,db.ForeignKey('roles.id'))
def__repr__(self):
return'User:'.format(self.username)
if__name__=='__main__':
manager.run()
主要注意第8行-20行,48行。要把原来的代码改成这样。
3.命令行的操作
创建迁移仓库
这个命令会创建migirations文件夹,所有迁移文件都放在里面
python3xxx.pydbinit
注:db是20行决定了,可以更改
自动创建迁移脚本
python3xxx.pydbmigrate-m"版本名(注释)"
更新数据库
python3xxx.pydbupgrade
当我们需要修改表结构时,直接在xxx.py里直接增删相应的代码
修改完成后,继续创建新的迁移脚本
python文件dbmigrate-m"新版本名(注释)"
更新数据库
python3xxx.pydbupgrade
更新完之后,其实就是提交操作,类似于git添加一个新的版本。
但是,如果我们想返回历史的版本,应该怎么操作呢?
先查看版本号
pythonxxx.pydbhistory
然后记住想要返回的版本号。
返回指定的版本
pythonxxx.pydbdowngrade(upgrade)版本号
然后打开你的代码,可以发现他自动复原了!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
热门推荐
10 祝孙辈生日祝福语简短
11 恋人跨年祝福语大全简短
12 考大学敬酒简短祝福语
13 开工投产大吉祝福语 简短
14 偶然结婚祝福语朋友简短
15 感谢学长学姐祝福语简短
16 戏精的祝福语简短
17 我要结婚祝福语简短
18 婚前女儿生日祝福语简短