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()
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 版本号