10、migrate

migrate

   帮助实现和Django做迁移相同的事情

安装

    pip install flask_migrate

使用:

   1>:在ext.py文件中导入
        from flask_migrate import Migrate
        #实力化一个migrate
        migrate = Migrate()
        migrate.init_app(app=app,db=db)

   2>:在manager.py文件中导入

        from myapp.models import *
        from flask_migrate import MigrateCommand
        #给manager绑定add_command('db',MigrateCommand)

使用命令:

#初始化,只用一次,用来生成migrations目录
python manager.py db init
#相当于Django里面的migrations
python manager.py db migrate
#根据迁移文件 做迁移
python manager.py db upgrade
#回退
python manager.py db downgrade

注意:

   如果想要重新做迁移怎么做?

首先:删除文件里面的migrations目录
然后:将数据库中的alembic_version
最后:python manager.py db init
     python manager.py db migrate
     python manager.py db upgrade

数据操作:

数据操作
   增加
       db.session.add(类的对象)
   删除
       db.session.delete(类的对象)
   #提交<无论是什么操作,都要提交>
       db.session.commit()
   查询:
       类名.query.XXX()

ext.py

from flask_sqlalchemy import SQLAlchemy
from flask_session import Session
from flask_migrate import Migrate
#实例化SQLAlchemy
db = SQLAlchemy()
#实例化migrate
migrate = Migrate()
def init_ext(app):
    #实例化Session
    se = Session()
    se.init_app(app)
    db.init_app(app)
    migrate.init_app(app=app,db=db)

manager.py

from flask_sqlalchemy import SQLAlchemy
from flask_session import Session
from flask_migrate import Migrate

#实例化SQLAlchemy
db = SQLAlchemy()
#实例化migrate
migrate = Migrate()
def init_ext(app):
    #实例化Session
    se = Session()
    se.init_app(app)
    db.init_app(app)
    migrate.init_app(app=app,db=db)

views.py

#写具体的处理函数
import random

from flask import Blueprint
from myapp.models import *
blue = Blueprint('first',__name__)

def init_myblue(app):
    app.register_blueprint(blue)

@blue.route('/insertdb/')
def insert_data():
    #实例化User
    u = User()
    u.name = 'flask' + str(random.randrange(100))
    u.age = random.randrange(100)
    #添加
    db.session.add(u)
    #提交
    db.session.commit()
    return u.name

@blue.route('/getone/')
def get_one_data():
    #返回的是一个list
    res = User.query.all()

    print(res)
    return 'ok'
@blue.route('/delete/')
def delete_one():
    user = User.query.filter_by(id=1).first()
    #删除
    db.session.delete(user)
    #提交
    db.session.commit()
    return 'success'

你可能感兴趣的:(10、migrate)