SQLAlchemy数据库迁移

代码部分

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://root:mysql@localhost/temp_python18'
# 动态追踪修改,无论设置与否不影响代码的运行,只会提示警告信息。
# 如果设置为True:跟踪数据库的变化,会影响代码的效率。
# 如果设置为False,不影响代码的效率。
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
# 实例化管理器对象
manage = Manager(app)
# 使用迁移框架
# migrate = Migrate(app,db)
Migrate(app,db)
# 添加迁移命令
manage.add_command('db',MigrateCommand)


# 定义角色模型类,必须继承自db.Model
class Role(db.Model):
    # 数据库表名,可以不定义,如果不定义,会默认创建同类名的表名role
    # 表名的定义:tb_roles;info_roles;
    __tablename__ = 'roles'
    # 定义字段,并制定主键
    id = db.Column(db.Integer, primary_key=True)
    info = db.Column(db.String(32), unique=True)
    us = db.relationship('User', backref='role')
    def __repr__(self):
        return 'info:%s' % self.info

# 定义用户模型类:name/email/pswd/外键(角色具体属于的身份信息)
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    # email = db.Column(db.String(32))
    mobile = db.Column(db.String(32))
    pswd = db.Column(db.String(32))
    # 多方定义外键,指向一方的表名的主键id
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

    def __repr__(self):
        return 'name:%s' % self.name



if __name__ == '__main__':
    # app.run(debug=True)
    manage.run()

实际操作顺序:
1.python 文件 db init
2.python 文件 db migrate -m"版本名(注释)"
3.python 文件 db upgrade 然后观察表结构
4.根据需求修改模型
5.python 文件 db migrate -m"新版本名(注释)"
6.python 文件 db upgrade 然后观察表结构
7.若返回版本,则利用 python 文件 db history查看版本号
8.python 文件 db downgrade(upgrade) 版本号,不推荐

猜你喜欢

转载自blog.csdn.net/weixin_43617255/article/details/83996316