flask数据库迁移

1.flask_script管理应用

(1)安装flask_script

pip intall flask_script

(2)配置

from flask_script import Manager
app = Flask(__name__)
db = SQLAlchemy(app)

manage = Manager(app)

if __name__ == '__main__':

    manage.run()

注意,这时候的启动服务已经不是app.run()了,而是manage.run()
启动服务器的命令如下:

python 文件名 runserver -p 端口号

2.进行迁移数据库
(1)安装flask-migrate

pip install flask-migrate

(2)在flask-scripth中增加迁移命令,并且起别名

from flask_migrate import Migrate,MigrateCommand
manage.add_command('db',MigrateCommand)

(3)创建migrate实例

#设置迁移Migrate对象,第一个是app应用,第二个参数是数据库操作句柄
migrate = Migrate(app,db)

(4)创建迁移仓库

python qianyi.py db_command init

创建完成后将会多出一个文件夹,名字为migrations
在这里插入图片描述
(5)创建迁移文件

python 文件名 db migrate -m '注释'

执行完成后会生成一个版本号,可以用来回滚版本
在这里插入图片描述
这个时候在上一步的文件夹中的versions里生成了一个迁移文件
在这里插入图片描述
(6)更新数据库

python 文件名 db upgrade

此时,数据库中就产生了新的表
在这里插入图片描述
(7)补充
查看历史版本

python 文件名 db history

回滚版本

python 文件名 db_command downgrade 版本号

3.所有的代码

from flask import Flask,render_template,request
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand
from flask_script import Manager
app = Flask(__name__)
app.secret_key='asfasfnjdfpogmkinbeoaq'
# 用于连接数据库的URI
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:0529@127.0.0.1:3306/flasktest'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False

# 创建用来管理数据库的对象(操作句柄),注意参数需要和app产生联系
db = SQLAlchemy(app)

manage = Manager(app)
manage.add_command('db',MigrateCommand)

migrate = Migrate(app,db)

# 一对多
class Role(db.Model):
    __tablename__='roles'
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(20),unique=True)

    # 还要在主表上添加关系,与用户表产生关系,代表这个角色下所有的用户
    # users = db.relationship('User',backref = 'role',lazy='subquery')
    users = db.relationship('User',backref = 'role',lazy='dynamic')

    def __repr__(self):
        return "<Role %s>"%self.name

class User(db.Model):
    __tablename__='user'

    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(20),unique=True)
    is_delete = db.Column(db.Boolean,default=False)
    email = db.Column(db.String(30),nullable=True)
    # 外键:添加的时候要指定表名和字段
    role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))

    def __repr__(self):
        return "<User %s>"%self.name

if __name__ == '__main__':
    manage.run()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值