如何在生产中结合夹具烧瓶的迁移?

时间:2018-11-29 12:22:27

标签: python sqlalchemy

我一直在寻找一个指南,该指南可以为我组织新手Flask项目的迁移脚本并使其运行夹具以将数据插入数据库提供指导。我宁愿使用普通的SQL而不是Python脚本。

作为我的新手,我不确定这是否是放置东西的首选方式...但是我想Django具有固定装置,它们可以在测试和生产中使用。

我自己介绍的教程仅包含用于测试的装置,因此到目前为止没有任何指导。

那么,您如何将SQL Fixture与Flask在生产中的迁移结合起来?

1 个答案:

答案 0 :(得分:0)

好吧,我为此做了一个 hack ,如果有人从中受益,我会把它张贴在这里。

这个想法是,如果migrations/versions目录中有与迁移脚本同名但以.sql结尾的文件,则此脚本将运行它。

将以下内容放置到由manage.py db migrate脚本创建的文件中。

文件:app.utils

from functools import wraps
from alembic import op
import sqlalchemy as sa
import inspect


def apply_migrations_update(f):
    @wraps(f)
    def wrap(*args, **kwargs):
        import os 

        retval = f(*args, **kwargs)

        dir_path = inspect.getfile(f)
        sqlfile = dir_path[:-3] + ".sql" 
        if os.path.isfile( sqlfile ): 
            print ("Opening .sql file {}".format(sqlfile))
            with open(sqlfile, 'r') as myfile: 
                s = sa.sql.text( myfile.read() ) 
                op.execute(s) 
            print ("SQL executed.".format(sqlfile))
        else:
            print ("No .sql file found {}".format(sqlfile))

        return retval

    return wrap

和文件版本/ *。py

"""a clever message describing schema changes

Revision ID: bc552c19h313
Revises: 
Create Date: 2018-11-29 16:02:37.716660

"""
from alembic import op
import sqlalchemy as sa
from app.utils import apply_migrations_update
#...

@apply_migrations_update
def upgrade():