zoukankan      html  css  js  c++  java
  • flask中如何生成迁移文件

      在flask网站开发中,如果直接对数据库进行修改的话,风险比较高,最好的是由迁移文件生成,这样确保了数据的误操作。  

      在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。

      注意这个模块需要安装

    pip install flask-migrate

      下面是实现代码,且文件名为zengsf.py:

    #coding=utf-8
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_migrate import Migrate,MigrateCommand
    from flask_script import Manager
    
    app = Flask(__name__)
    manager = Manager(app)
    
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1:3306/zengsf'
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    db = SQLAlchemy(app)
    
    #第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
    Migrate(app,db) 
    
    #manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
    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)
        def __repr__(self):
            return 'Role:'.format(self.name)
    
    #定义用户
    class User(db.Model):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(64), unique=True, index=True)
        def __repr__(self):
            return 'User:'.format(self.username)
    
    if __name__ == '__main__':
        manager.run()

    然后在终端输入:

    python zengsf.py db init   初始化数据库,会生成一个叫migrations文件夹。

    python zengsf.py db migrate    生成迁移文件,但不改变数据库。

    python zengsf.py db upgrade    更新数据库。

    python zengsf.py db history     查看历史记录

    python zengsf.py db downgrade 版本号     回退到该版本

  • 相关阅读:
    C语言I博客作业01
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言II博客作业04
    C语言II博客作业03
    C语言II—作业02
    C语言II博客作业01
  • 原文地址:https://www.cnblogs.com/zengsf/p/10115940.html
Copyright © 2011-2022 走看看