flask(其七) 蓝图与数据库的迁移

蓝图可以实现模块化的分离
使用蓝图的三个步骤:
  1,注册蓝图对象
  2,导入到创建蓝图对象的文件中
  3,使用蓝图对象

在一个新的文件之中,创建一个蓝图对象

from flask import Blueprint
#注册蓝图对象,url\_prefix='/admin' 表示访问时加上 /admin
api = Blueprint('api', __name__,url\_prefix='/admin')
#导入第三个文件之中的定义的函数!与新的视图文件联系起来
from test2 import hello
#使用蓝图对象!
@api.route('/login')
def login():
    return 'login'

在原来的文件之中,导入注册的蓝图对象!

#将第蓝图导入进来,不需要再次导入函数,因为注册相当于导入
from test1 import api
app.register_blueprint(admin,url_prefix='/admin')
if __name__ == '__main__':print(app.url_map)
    app.run(debug=True)

再次增加一个视图文件

#导入蓝图对象!直接从创建蓝图对象的文件导入到本地
from test1 import api
#使用蓝图,添加注册操作
@api.route('/hello')
def hello():
    return 'hello'

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

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
#导入迁移模块
from flask_migrate import Migrate,MigrateCommand
#实现数据库的迁移实际上是创建表
from flask_script import Shell,Manager

app = Flask(__name__)

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)

#1,实例化管理器对象,代替app运行run方法!
manager = Manager(app)
#2,将两者进行关联,第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
Migrate(app,db)

#3,添加迁移命令!真正实现迁移的是MigrateCommand
#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db变量,与init 相关联
manager.add_command('db',MigrateCommand)

#定义模型Role
class Role(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)

#定义用户
class User(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__':
    #4,代替app 实现run方法!
    manager.run()
View Code

1,使用命令行完成数据库的迁移命令,会在database.py 同级目录。执行命令init 子命令创建迁移仓库

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

2,执行迁移命令,生成迁移文件,后面字符串是任意写,在默认迁移文件加上你所写的字符串(容易找到),相当于生成了表结构,不是数据库表结构

python database.py db migrate -m 'initial migration'

3,在刚刚自动新建文件运行文件里面的 upgrate 函数,完成数据的更新,实际的数据库创建表结构

python database.py db upgrade

4,上面完成了表的迁移,如果更新的数据,更改了字段

python database.py db migrate -m 'upgrate migration'

5,再次更新字段,生成了另一个文件

python database.py db upgrade

6,我们可以查看所生成的所有的迁移文件

python app.py db history
'''
    输出格式:<base> ->  版本号 (head), initial migration
'''

7,回滚到我们的历史版本之中,第六步的版本号

#  python app.py db downgrade 版本号

 

posted @ 2018-05-21 20:30  十七楼的羊  阅读(302)  评论(0编辑  收藏  举报