본문으로 건너뛰기

Atlas와 SQLAlchemy 연동하기

스키마 마이그레이션 파일 생성

python3 -m pip install atlas-provider-sqlalchemy
data "external_schema" "sqlalchemy" {
# 아래 명령어를 실행하면 SQL 문이 출력됩니다.
program = [
"atlas-provider-sqlalchemy",
"--path",
"./db",
"--dialect",
"postgresql"
]
}

env "sqlalchemy" {
src = data.external_schema.sqlalchemy.url
dev = "docker://postgresql/15/dev"
migration {
dir = "file://migrations"
}
format {
migrate {
diff = "{{ sql . \" \" }}"
}
}
}
정보
db/
├── __init__.py
├── base.py
└── ...
atlas_models.py
import importlib
import inspect
from pathlib import Path

from atlas_provider_sqlalchemy.ddl import print_ddl # type: ignore[import-untyped]

import db

models = []

db_dir = Path(db.__file__).parent

for script in db_dir.glob("*.py"):
if script.suffix == ".py" and script.stem not in ["__init__", "base"]:
module_name = f"{db.__name__}.{script.stem}"
module = importlib.import_module(module_name)

for name, obj in inspect.getmembers(module):
if inspect.isclass(obj) and obj != db.base.Base and issubclass(obj, db.base.Base):
models.append(obj)

print_ddl("postgresql", models)
data "external_schema" "sqlalchemy" {
# 아래 명령어를 실행하면 SQL 문이 출력됩니다.
program = [
"python3",
"atlas_models.py"
]
}

위와 같은 방법을 사용할 수도 있습니다.

atlas migrate diff --env sqlalchemy [title]

SQLAlchemy 모델을 변경하고 위 명령어를 실행할때마다 적용해야할 SQL파일을 migrations 디렉토리에 생성합니다. 생성된 파일을 직접 수정해야하는 경우, 수정 후 아래 명령어를 통해 atlas.sum 파일을 업데이트해야합니다.

atlas migrate hash