美文网首页
Flask框架从入门到精通之扩展脚本,模型迁移操作

Flask框架从入门到精通之扩展脚本,模型迁移操作

作者: 爽爽ing | 来源:发表于2019-05-31 10:46 被阅读0次

    一,首先我们要安装flask扩展

    pip install Flask-Script
    

    我们就可以这样写代码

    from flask import Flask
    from flask_script import Manager
    
    app = Flask(__name__)
    
    # 用Manager管理app对象
    manager = Manager(app)
    
    
    @app.route('/')
    def index():
        return 'index page'
    
    
    if __name__ == '__main__':
        # 用manager对象运行
        manager.run()
    

    这样我们就可以想Django一样启动Flask的服务器:

    python script_flask.py(文件的名字) runserver
    

    如果想运行到其他IP和Port上:

    python demo.py runserver -h 0.0.0.0 -p 5000 -d    # -d表示debug
    

    还可以进入shell环境:

    python demo.py shell    # 进入交互式python环境,并且自动导入demo.py中的内容。
    

    迁移操作

    为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。

    pip install flask-migrate
    

    进行配置,导入我们需要的包

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    import pymysql
    from flask_migrate import Migrate, MigrateCommand
    from flask_script import Manager
    
    pymysql.install_as_MySQLdb()
    app = Flask(__name__)
    
    # 通过脚本管理flask程序
    manager = Manager(app)
    
    # 设置连接数据库的URL
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1:3306/db_flask'
    
    # 设置每次请求结束后会自动提交数据库中的改动
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    
    # 数据库和模型类同步修改
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    
    # 查询时会显示原始SQL语句
    app.config['SQLALCHEMY_ECHO'] = True
    
    db = SQLAlchemy(app)
    
    # 创建数据库迁移对象
    Migrate(app, db)
    
    # 向脚步管理添加数据库迁移命令 db指命令的别名
    manager.add_command('db', MigrateCommand)
    
    
    # 类型
    class Type(db.Model):
        # 表名
        __tablename__ = 'tbl_types'
    
        # 数据库真正存在的字段
        id = db.Column(db.Integer, primary_key=True)  # 主键
        name = db.Column(db.String(32), unique=True)  # 名字
    
        # 数据库中不存在的字段,只是为了查找和反向查找。
        # backref:在关系的另一模型中添加反向引用
        heros = db.relationship("Hero", backref='type')
    
        def __repr__(self):
            return self.name
    
    
    # 英雄
    class Hero(db.Model):
        # 表名
        __tablename__ = 'tbl_heros'
        # 数据库真正存在的字段
        id = db.Column(db.Integer, primary_key=True)  # 主键
        name = db.Column(db.String(64), unique=True)  # 名字
        gender = db.Column(db.String(64))  # 性别
    
        # 外键 一个射手对应很多英雄
        type_id = db.Column(db.Integer, db.ForeignKey("tbl_types.id"))
    
        def __repr__(self):
            return self.name
    
    
    if __name__ == '__main__':
        # 0.0.0.0代表任何能代表这台机器的地址都可以访问
        # app.run(host='0.0.0.0', port=5000)  # 运行程序
        manager.run()
    
    

    首先我们通过命令创建出migrations文件夹,后面所有的迁移文件都会放在这个文件夹里面,只有第一次才执行这句话

    python flask_migrate_db.py db init
    
    生成迁移文件
    

    下面这条命令跟我们Django里面的makemigrations一样,是生成迁移文件的作用。因为我们的模型类并没有添加或删除字段,所有第一次会出现没有改变的提示。
    -m:给迁移文件加上注释

     python flask_migrate_db.py(文件名)  db migrate -m 'first create'
    

    添加新字段
    我们在英雄里面添加一个年龄字段,再迁移一下:

     age = db.Column(db.Integer)  # 年龄
    

    更新操作

    python3 flask_migrate_db.py(文件名) db upgrade
    
    降级
    

    python3 flask_migrate_db.py db history


    python3 flask_migrate_db.py db downgrade 4cee71e47df3
    

    如果想降到最底层

    python3 flask_migrate_db.py db downgrade base
    

    相关文章

      网友评论

          本文标题:Flask框架从入门到精通之扩展脚本,模型迁移操作

          本文链接:https://www.haomeiwen.com/subject/tywvtctx.html