flask学习笔记代码篇-16

flask16-数据库迁移


本章内容:flask数据库迁移,根据model设计的表模型在数据库生成对应的表

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

from flask_script import Manager

from flask_migrate import Migrate, MigrateCommand



app = Flask(__name__)

# 配置数据库链接地址

app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://user1:123456@127.0.0.1:3306/migrat"

# 是否跟踪数据库的修改

app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# 初始化数据库操作对象

db = SQLAlchemy(app)

manager = Manager(app)

# 1. 先将 app 与 db 关联

Migrate(app, db)

# 2. 将数据库的迁移命令添加到 flask-script 里面

manager.add_command('db', MigrateCommand)

# 步骤:

# 1. 生成迁移所需要的文件夹  python xxx.py aaa init (一个项目只需要做一次)

# 2. 生成指定版本的迁移文件  python xxx.py aaa migrate -m "注释" (迁移一次执行一次)

# 3. 执行迁移 将当前模型映射到表中 python xxx.py aaa upgrade



# 4. python xxx.py db upgrade/downgrade [版本号]

# 5. 查看当前项目所有的迁移版本   python xxx.py db history

# 6. 可看项目当前处于哪一个迁移版本 python xxx.py db current



# 角色

class Role(db.Model):

    __tablename__ = "roles"  # 指定表名,如果不指定会以类名的小写做为表名

    id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.String(128), unique=True)

    users = db.relationship("User", backref="role")



# 用户

class User(db.Model):

    __tablename__ = "users"

    # 主键

    id = db.Column(db.Integer, primary_key=True)

    # 用户名

    name = db.Column(db.String(128), unique=True)

    # 邮箱

    email = db.Column(db.String(128), unique=True)

    # 用户密码

    password = db.Column(db.String(128))

    # 外键-关联roles

    role_id = db.Column(db.INTEGER, db.ForeignKey('roles.id'))

    # 添加了一个字段

    nickname = db.Column(db.String(128))

    # 再添加一个字段

    bbb = db.Column(db.String(128), unique=True)

@app.route('/')

def index():

    return 'index'



if __name__ == '__main__':

    manager.run()

 

目录结构:

 

其中migrations是自动生成的迁移文件夹

命令演示:

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值