0

나는 Alembic와 데이터베이스 마이그레이션을 관리하고있어 env.py (예를 들어, setting target_metadata) 또는 alembic.ini (예를 들어, setting sqlalchemy.url는) 스크립트에서 내 데이터베이스의 마이그레이션을 관리하는 모든 수정없이 alembic init에 의해 생성 된 기본 파일을 사용하고 싶습니다.Alembic에서 명령 API와 함께 사용하기 위해 필요한 'target_metadata'를 프로그래밍 방식으로 설정할 수 있습니까?

예를 들어, 나는 같은 command 기반 스크립트를 사용하려면 다음 원하는이 모든 작품으로

import os 

from alembic.config import Config 
from alembic import command 
from myapp import db 

alembic_cfg = Config(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'alembic.ini')) 
alembic_cfg.set_main_option("sqlalchemy.url", 
          os.environ['DATABASE_URL']) 
alembic_cfg.set_main_option("script_location", 
          os.path.join(os.path.abspath(os.path.dirname(__file__)), '.db_migrations')) 
alembic_cfg.set_main_option("target_metadata", db.metadata) # This doesn't work! 

command.revision(alembic_cfg, message='Test of new system', autogenerate=True) 
command.upgrade(alembic_cfg, 'head') 

, 를 표시된 선이 실패하고 난 표시되지 않습니다 제외 방법 target_metadata (env.py 편집 제외)을 설정하십시오.

Alembic의 명령 API를 사용하는 위 스크립트에서 프로그래밍 방식으로 Alembic에 필요한 target_metadata을 프로그래밍 방식으로 설정할 수 있습니까?

답변

1

대답은 메타 데이터를 설정하지 않았기 때문에 MigrationContext을 만들 때 설정하는 것입니다. 당신이 Config, 그 다음에 ScriptDirectory, 그 다음에 EnvironmentContext을 먼저 만들어야합니다. 그런 다음 직접 환경을 설정하기 위해 개정을 실행할 때이 오브젝트를 올바르게 사용해야합니다.

짧은 대답은 내가 알고있는 Flask-SQLAlchemy와 Alembic을 통합 한 두 가지 확장이 있다는 것입니다. Flask-Migrate은 잠시 동안 주변에 있었고 Alembic의 기본 명령에 대해 거의 직선적 인 래퍼를 제공합니다.

Flask-Alembic (개발되지 않은 동일한 이름의 이전 프로젝트와 관련 없음)은 Flask 및 Alembic과의 긴밀한 통합을 제공합니다. 그것은 Alembic의 내부를 노출시키고 Flask의 dev 버전으로 작업하지만 더 새롭고 실험적입니다.

둘 다 활발하게 유지 관리됩니다. 내부에 도착해야한다면 Flask-Alembic을 선택하십시오. 명령 만 있으면 Flask-Migrate를 선택하십시오.

+0

이러한 확장 프로그램은 훌륭합니다. 문제는 내가 갖고있는 문제와 정확히 일치합니다. 나의 도전은 이제 어느 것을 사용할 것인지 선택하는 것이다. – orome

+0

둘 다 멋지군요. 중요한 질문은 현재 패키지 (최신 플라스크, SQLAlchemy 및 Alembic 등)가 각 패키지의 현재 상태 (활발히 유지 관리됨)입니다. [Miguel 언급] (http://blog.miguelgrinberg.com/post/flask-migrate-alembic-database-migration-wrapper-for-flask) Flask-Migrate를 만드는 그의 이유는 Flask-Alembic이 , 약 1 년 전) "멈춘다." – orome