代码部分
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) 版本号,不推荐