Как вы комбинируете перенос светильников в производство? - PullRequest
0 голосов
/ 29 ноября 2018

Я искал учебное пособие, в котором можно было бы дать рекомендации, если я организую скрипты миграции моего нового проекта Flask и заставлю их запускать приспособления для вставки данных в базу данных.Я бы предпочел использовать простой SQL, а не скрипты Python.

Поскольку я новичок здесь, я не уверен, хотя это предпочтительный способ поместить вещи туда ... но я предполагаю, что у Django есть приспособления, и они могутиспользуется как в тестировании, так и в производстве.

Учебники, которые я представил сам, содержат только приспособления для тестирования, поэтому пока никаких указаний от них нет.

Итак, как вы объединяете приспособления SQL с миграцией Flask на производстве?

1 Ответ

0 голосов
/ 29 ноября 2018

Ну, я сделал хак для этого, и я опубликую его здесь, если кто-то получит выгоду от этого.

Идея состоит в том, что если в каталоге migrations/versions есть файл с тем же именем, что и сценарий миграции, но заканчивающийся на .sql, то этот сценарий запускает его.

Поместите содержимое ниже в файл, который был создан сценарием manage.py db migrate.

file: 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():
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...