我一直在寻找一个指南,该指南可以为我组织新手Flask项目的迁移脚本并使其运行夹具以将数据插入数据库提供指导。我宁愿使用普通的SQL而不是Python脚本。
作为我的新手,我不确定这是否是放置东西的首选方式...但是我想Django具有固定装置,它们可以在测试和生产中使用。
我自己介绍的教程仅包含用于测试的装置,因此到目前为止没有任何指导。
那么,您如何将SQL Fixture与Flask在生产中的迁移结合起来?
答案 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():