flask_migrate Demo
1.项目目录结构
flask_migrate
-static
-templates
-model.py
-exts.py
-manager.py
-config.py
-app.py
2.各py代码
model.py(模型)
from exts import db
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(30))
exts.py(中间文件,避免循环导入)
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
manager.py (迁移项目的启动文件, 所有model建议在这里导入,migrate 的时候可以映射到数据库中)
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from app import app
from exts import db
from model import User
manager = Manager(app)
Migrate(app, db)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
config.py(数据库配置信息)
# MYSQL数据库配置信息
USERNAME = 'root'
PASSWORD = 'root'
HOSTMANE = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_migrate'
SQLALCHEMY_DATABASE_URI = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTMANE}:{PORT}/{DATABASE}'
app.py(项目启动文件)
from flask import Flask
import config
from exts import db
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
@app.route('/')
def hello_world():
return 'hello world!'
if __name__ == '__main__':
app.run()
项目启动之前进行迁移映射,
python manager.py db init(初始化,在项目根目录下生产migrations目录)
python manager.py db migrate
python manager.py db upgrade
第一次迁移的时候,需要执行以上三个命令。
后续增删数据表字段,只需要执行后两条命令即可,实现映射