Flask 3.0.0 使用Flask-Migrate 4.0.5 数据迁移说明

数据迁移就是将程序中定义的好的表结构映射到数据库中的过程,减少手动创建数据库表的麻烦。

Flask使用Flask-Migrate进行数据库对象迁移。

迁移的前提条件是在Python程序中定义好表结构,然后,进行如下操作:

# 导入迁移对象
from flask_migrate import Migrate as migrate
# 实例化迁移对象
grate = migrate(app, db)
# 执行迁移步骤
# migrate 的命令
 1、flask db init ,#这步只执行一次
 2、flask   db migrate,#生成迁移脚本
 3、flask db upgrate,#运行迁移脚本,同步到数据库中

案例代码如下:

from flask import Flask, Response, request, render_template
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
from urllib.parse import quote_plus as urlquote
import random
import uuid
from datetime import datetime
import sqlalchemy.types as types
from flask_migrate import Migrate as migrate

app = Flask(__name__)

HOST = 数据库IP
PORT = 数据库端口
USERNAME = 用户名
PASSWORD = 密码
DATABASE = 数据库名
strPwd = urlquote(PASSWORD)
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{strPwd}@{HOST}:{PORT}/{DATABASE}?charset=utf8"

db = SQLAlchemy(app)

grate = migrate(app, db)
# migrate 的命令
# 1、flask db init ,这步只执行一次
# 2、flask   db migrate,生成迁移脚本
# 3、flask db upgrate,运行迁移脚本,同步到数据库中

with app.app_context():
    with db.engine.connect() as conn:
        sql = text(" select * from xc_role ")


#         rs = conn.execute(sql)
#         print(rs.fetchone())

class Role(db.Model):
    __tablename__ = "xc_role"
    id = db.Column(db.String(32), primary_key=True)
    role_name = db.Column(db.String(255), nullable=True)
    role_code = db.Column(db.String(255), nullable=True)
    description = db.Column(db.String(255), nullable=True)
    create_time = db.Column(db.DateTime, nullable=True)
    update_time = db.Column(db.DateTime, nullable=True)
    status = db.Column(db.String(1), nullable=True)


@app.route("/add_role")
def add_role():
    idStr = str(uuid.uuid4())
    idStr = idStr.replace("-", "")
    roleCodeStr = str(uuid.uuid4())
    role = Role(id=idStr, role_name=roleCodeStr, role_code=roleCodeStr, description="设置管理员角色",
                create_time=datetime.now(), update_time=datetime.now(), status="1")
    db.session.add(role)
    db.session.commit()
    return Response("添加角色信息成功", 200)


@app.route("/query_role")
def query_role():
    role = Role.query.get('308041566e7742829bd55867ca069473')
    print(f"{role.role_name}")
    return "查询角色成功"


@app.route("/delete_role")
def delete_role():
    role = Role.query.get('78c5411d945b40adb1b370c2a646b7b9')
    db.session.delete(role)
    db.session.commit()
    return "删除角色成功"


@app.route("/update_role")
def update_role():
    role = Role.query.get('308041566e7742829bd55867ca069473')
    role.role_name = "jijinliang"
    db.session.commit()
    return "更新角色成功"


@app.route("/query_type")
def query_type():

    return "查询类型成功"


@app.route('/')
def index():
    # put application's code here
    name = "名称"
    return render_template('index.html', name=name)


@app.route('/show')
def show():
    return Response("展示SHOW方法信息", 200)


@app.route('/parse/<int:post_id>')
def parse(post_id):
    """
     解析信息
    """
    username = "jijinliang"
    return Response(f"解析信息方法{username},数字是:{post_id}", 200)


@app.route("/page")
def page():
    num = request.args.get("num", default=1, type=int)
    return Response(f"您当前访问的页面是{num}", 200)


if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值