마이그레이션
데이터베이스 초기화
모든 예에서는 이미 데이터베이스가 있다고 가정합니다.
그렇지 않고 테이블을 만들어야 하는 경우 Ormar가 기본 테이블 빌드에 sqlalchemy를 사용하기 때문에 매우 간단합니다.
다음 예와 같이 create_all()를 호출하기만 하면 됩니다.
| sqlalchemy 가져오기
# 모델 정의에 사용된 데이터베이스 인스턴스와 동일한 sqlalchemy 형식으로 데이터베이스 URL을 가져옵니다.
엔진 = sqlalhemy.create_("sqlite://test.db")
# ormar Models 정의에 사용되는 것과 동일한 메타데이터여야 합니다.
create_all (엔진)
|
ormar.ormar_config 개체에 노출되는 개별 테이블을 만들 수도 있습니다.
| sqlalchemy 가져오기
# 모델 정의에 사용된 데이터베이스 인스턴스와 동일한 sqlalchemy 형식으로 데이터베이스 URL을 가져옵니다.
엔진 = sqlalhemy.create_("sqlite://test.db")
# 아티스트는 이전 예제의 오르마 모델입니다.
아티스트.ormar_config 테이블.생성(엔진)
|
!!!경고: 테이블을 한 번만 생성하면 되므로 Python 콘솔을 사용하거나 처음 사용한 후 프로덕션 코드에서 스크립트를 제거하십시오.
증류기 사용
테이블과 마찬가지로 sqlalchemy를 기반으로 테이블을 마이그레이션하고 있으므로 alembic을 사용하십시오.
초기화
명령줄을 사용하여 이 미니멀리즘 예제를 재현합니다.
| 알렘빅 init alembic
Alembic 개정 -- 자동 생성 -m "일부 변경"
알렘빅 업그레이드 헤드
|
파일env.py예제
스틸 마이그레이션의 간단한 예는 다음과 비슷해야 합니다.
애플리케이션이 다음과 같이 구성된 경우:
| -> 앱
-> alembic (초기화 폴더 - 앱 폴더 내부에서 alembic 실행)
-> 모델 (여기 모델이 있습니다)
->__init__
->my_models.py
|
env.py 파일(alembic 폴더)은 다음과 같을 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 | logging.config에서 파일 가져오기Config
sqlalchemy에서 _
alembic 가져오기 컨텍스트에서
시스템 가져오기, OS
# 시스템 경로에 앱 폴더 추가(대안은 python -m이 있는 상위 폴더에서 실행하는 것입니다. ..)
내 경로 = os.ath.irname (os.ath.abspath (__file__)))
Sys.ath. (0, myPath+' /.. / ')
# 이것은 Alembic Config 개체입니다.
# 사용 중인 .ini 파일 내의 값에 액세스합니다.
컨텍스트 = 컨텍스트.config
# 파이썬 로깅을 위해 구성 파일을 해석합니다.
# 이 라인은 기본적으로 로거를 설정합니다.
fileConfig(구성. config_file_name)
# 모델의 MetaData 개체를 여기에 추가하십시오(ormar에 사용된 개체).
# '자동 생성' 지원
App.models. 메타데이터 my_에서
target_metadata = 메타데이터
# 여기에 URL을 설정하거나 설정에서 가져오기
# 기본적으로 URL은 alemvic.ini 파일의 저장된 sqlachemy.url 변수에 있습니다.
URL="sqlite://test.db"
Def run_Mig_ ():
'오프라인' 모드에서 마이그레이션을 실행합니다.
이것은 URL만으로 컨텍스트를 구성합니다.
엔진이 아니라 엔진이 허용 가능하지만
엔진 생성을 건너뛰는 well.By
DBAPI를 사용할 필요도 없습니다.
여기서 conext.run()에 대한 호출은 주어진 문자열을 다음으로 내보냅니다.
스크립트 출력.
"""
컨텍스트.구성(
URL = URL,
target_metadata = target_metadata,
리터럴 _ 바인즈 = 참,
사투리_opts={"paramstyle": "named"},
# UUID 필드 세트를 사용하는 경우 이 param도 마찬가지입니다.
# 접두사는 alembic의 sqlalchemy 가져오기 이름과 일치해야 합니다.
# sqlalcheme_al_prefix 옵션(기본값 'sa')으로 설정할 수 있습니다.
user_al_prefix='sa.'
)
컨텍스트와 함께. _ ():
컨텍스트. run_ ()
Def run_tions_온라인():
'온라인' 모드에서 마이그레이션을 실행합니다.
이 시나리오에서는 엔진을 만들어야 합니다.
그리고 컨텍스트와 연결을 연결합니다.
"""
연결 가능 = create_ (URL)
연결 가능 연결()을 연결로 사용합니다.
컨텍스트.구성(
connection=connection
target_metadata = target_metadata,
# UUID 필드 세트를 사용하는 경우 이 param도 마찬가지입니다.
# 접두사는 alembic의 sqlalchemy 가져오기 이름과 일치해야 합니다.
# sqlalcheme_al_prefix 옵션(기본값 'sa')으로 설정할 수 있습니다.
user_al_prefix='sa.'
)
컨텍스트와 함께. _ ():
컨텍스트. run_ ()
컨텍스트가 _on_mode인 경우():
run_tions_ ()
기타:
run_tions_온라인 ()
|
제외 양식
컨텍스트.conre.에 전달된 포함 _ 개체 인수를 사용하여 특정 테이블을 포함하거나 제외할 수도 있습니다. 이 함수는 지정된 개체에 대해 참/거짓을 반환하는 함수여야 합니다.
예제 함수는 이름이 "데이터 _ 작업"이 아닌 경우 데이터 _로 시작하는 테이블을 제외합니다.
| Def _(개체, 이름, type_, , _to):
이름과 이름이 ['data_')에 없는 ('data_')와 함께 시작하는 경우:
거짓 반환
트루 반환
|
!!!_ 함수 인수(이름을 변경할 수 있음)가 포함된 참고 사항이 필요하며 해당 인수가 수행하는 작업을 확인하고 alembic 문서를 확인하려면 alembic에서 정의됩니다.
그런 다음 컨텍스트(온라인 및 오프라인)로 전달합니다.
| 컨텍스트.구성(
URL = URL,
target_metadata = target_metadata,
리터럴 _ 바인즈 = 참,
사투리_opts={"paramstyle": "named"},
user_al_prefix='sa.',
포함 _ 개체 = 포함 _ 개체
)
|
!!!정보 SQL Alchemy 테이블 생성 설명서에서 테이블 생성, 변경 및 마이그레이션에 대한 자세한 내용을 읽을 수 있습니다.