python - 您如何在生产中结合 Fixtures Flask 迁移?
问题描述
我一直在寻找一个教程,可以指导我是否应该组织我的新手 Flask 项目的迁移脚本并让它们运行固定装置以将数据插入数据库。我更喜欢使用纯 SQL 而不是 Python 脚本。
因为我是这里的新手,所以我不确定这是把东西放在那里的首选方式......但我猜 Django 有固定装置,它们可以在测试和生产中使用。
我自己介绍的教程仅包含用于测试的固定装置,因此到目前为止还没有任何指导。
那么,如何在生产环境中将 SQL 固定装置与 Flask 的迁移结合起来呢?
解决方案
好吧,我为此做了一个 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():
推荐阅读
- java - 在接收端获取 API 发送方的 IP 地址
- java - NullPointerException 从 FXML 加载场景图,与 Spring 集成
- react-native - React-Native 和 Mapsforge
- android - 使用 Cordova 为本地静态网站提供服务?
- c++ - 匹配特殊字符的字符串
- python - 无法在 Ubuntu 18.04 上安装 Python-Rocksdb
- java - 如何在属性中使用 Lombok 定义 JSON:@JsonPropertyOrder 和 @JsonIgnore (JAVA)
- android - VoIP通话结束后如何防止最小化的应用程序留在前台?
- javascript - 如何根据 javascript 中定义的语言环境验证数字格式
- java - Liferay 7.1 - 如何为 pdf 文件添加链接 html