• Flask 学习15.flaskmigrate数据迁移 上海


    前言

    Flask-SQLAlchemy ORM 可以直接操作数据库,可以用db.create_all()代码同步表到数据库。
    当我们需要修改表的字段,比如对表新增字段,修改字段的时候需用到flask-migrate 插件来同步迁移数据。

    flask-migrate 迁移数据

    django 框架里面可以用migrate 命令进行数据库的同步,Flask 框架有个flask-migrate 插件可以实现类似功能。
    通过命令行操作实现数据库的同步。

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_migrate import Migrate
    
    app = Flask(__name__)
    # 设置数据库连接地址
    DB_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/web'
    app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
    # 是否追踪数据库修改,一般不开启, 会影响性能
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    # 是否显示底层执行的SQL语句
    app.config['SQLALCHEMY_ECHO'] = True
    
    # 初始化db,关联flask 项目
    db = SQLAlchemy(app)
    # 迁移组件初始化
    Migrate(app, db)
    
    
    # 创建模型
    class Students(db.Model):
        __tablename__ = 'students'  # 数据库表名
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(20))
        fullname = db.Column(db.String(30))
        nickname = db.Column(db.String(30))
    
        def __repr__(self):
            return f"<Students(name='{self.name}', fullname='{self.fullname}', nickname='{self.nickname}')>"
    
    
    class Users(db.Model):
        __tablename__ = 'user'  # 数据库表名
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(30))
    
        def __repr__(self):
            return f"<Users(id='{self.id}', name='{self.name}')>"
    

    执行迁移命令,先设置环境变量, 如果启动文件是app.py 这步可以省略。

    set FLASK_APP=app.py  # 设置环境变量指定启动文件
    

    windows用set设置环境变量,linux 用export 设置环境变量

    export FLASK_APP=app.py  # 设置环境变量指定启动文件
    

    执行相关命令

    flask db init  # 生成迁移文件夹  只执行一次
    flask db migrate  # ⽣成迁移版本, 保存到迁移文件夹中
    flask db upgrade  # 执行迁移
    

    迁移命令

    init 命令执行后,会生成migrations目录

    flask db init
    

    migrate 命令生成迁移脚本,保存到迁移文件夹中versions目录

    flask db migrate
    

    upgrade 命令执行迁移

    flask db upgrade
    


    执行完upgrade 命令才会在数据库中生成表

  • 相关阅读:
    SQL中的union
    SQL的类型转换
    Keytool生成证书
    Openssl生成证书
    Python示例-Json Parse
    Python示例-TCP Port Scan
    Python套接字
    TCP端口扫描
    Linux环境变量
    Python示例-Logging
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/16622333.html
Copyright © 2020-2023  润新知