peewee-migrate 的简单使用


功能

peewee-migrate 自动生成中间文件并更新数据库表

代码

from peewee_migrate import Router

# peewee models 定义模块,具体定义省略
import my_models

# 使用 my_models.mysql_database 注册一个 migrate router
router = Router(database=my_models.mysql_database, ignore=[my_models.BaseModel._meta.name])
# 创建 migrate 中间文件,并获取到文件名
name = router.create(auto=[
    my_models
])
# 如果 migrate 文件创建成功,则自动执行后续步骤
if name:
    tips = 'New database spec generated, please check migrations/{name}.py\n\n\n'
    # 打开生成的文件,然后输出文件内容,供人工确认
    with open(f'migrations/{name}.py') as f:
        migrate_func = False
        for line in f.readlines():
            if line.startswith('def migrate('):
                migrate_func = True
            if line.startswith('def rollback('):
                migrate_func = False
            if migrate_func:
                tips += line
        tips += f.read()
    tips += 'if confirmed, please type y\n'

    # 人工确认通过后,输入 y,自动执行相应修改
    if input(tips) == 'y':
        router.run(name)