문제

저는 현재 미래의 db 기반 웹 앱과 현재 PHP로 작성된 일부 앱의 포트를 위해 Python 프레임워크 Django를 살펴보고 있습니다.지난 몇 년간 가장 골치 아픈 문제 중 하나는 데이터베이스 스키마 변경 사항을 추적하고 이러한 변경 사항을 생산 시스템에 배포하는 것이었습니다.나는 그것들을 실행 취소할 수 있는지 감히 요구하지 않았지만 물론 테스트와 디버깅을 위해서는 훌륭한 기능이 될 것입니다.여기에 있는 다른 질문에서(예: 이 하나 또는 이 하나), 나는 혼자가 아니며 이것이 사소한 문제가 아니라는 것을 알 수 있습니다.또한 거기에 나온 답변에서 많은 영감을 얻었습니다.

자, Django는 매우 강력해 보이는데, 위의 문제를 해결하는 데 도움이 되는 도구가 있나요?어쩌면 그들의 문서에도 있는데 내가 놓쳤을까요?

도움이 되었습니까?

해결책

DB 스키마 마이그레이션을 처리하는 타사 유틸리티가 두 개 이상 있습니다. 남쪽 그리고 장고 에볼루션.나는 둘 중 하나를 시도하지 않았지만 Evolution이 조금 더 오래되었지만 South에 대해 좋은 소식을 들었습니다.

또한, 보세요 스키마 진화 Django 위키에 있습니다.DB 마이그레이션에 대한 위키 페이지 일뿐입니다.

다른 팁

지난 번 확인했을 때(버전 0.97), syncdb는 DB 스키마를 models.py 파일과 동기화하기 위해 테이블을 추가할 수 있지만 다음은 수행할 수 없습니다.

  • 채워진 DB에 열 이름을 바꾸거나 추가합니다.그건 손으로 해야 합니다.
  • 모델을 리팩토링하고(예: 테이블을 두 개로 분할) 그에 따라 DB를 다시 채웁니다.

두 가지 다른 스크립트를 사용하여 마이그레이션을 수행하기 위해 Django 스크립트를 작성하는 것이 가능할 수도 있습니다. 관리자, 그러나 DB가 크면 시간이 오래 걸릴 수 있습니다.

최근 DjangoCon에서는 DB 스키마 변경에 대한 패널 세션이 있었습니다.~이있다 세션 영상 (Google에 감사드립니다) 이러한 유틸리티에 대한 유용한 정보를 제공해야 합니다.

그리고 지금은 또한 이민.에서 발표:

django-evolution은 데이터베이스 스키마에 아직 반영되지 않은 모델의 변경 사항을 감지하고 두 가지를 다시 동기화하기 위해 수행해야 할 작업을 파악함으로써 이 문제를 영리한 방법으로 해결하려고 시도합니다. 대조적으로 dmigrations는 어리석은 접근 방식을 취합니다.이를 위해서는 일련의 마이그레이션에서 변경 사항을 명시적으로 기술해야 하며, 이는 기본 모델을 반영하는 가장 최근 상태로 데이터베이스를 가져오기 위해 적용됩니다.

이는 마이그레이션을 생성하는 개발자에게 추가 작업을 의미하지만 전체 프로세스를 완전히 투명하게 만들기도 합니다. 우리 프로젝트에서는 작동할 수 있는 가장 간단한 시스템을 사용하기로 결정했습니다.

(나의 굵은 글씨)

좋은 얘기 많이 들었어요 Django 스키마 진화 지점 실제 사용자들의 의견이었습니다.대부분 기본적으로 작동하며 해야 할 일을 수행합니다.

찾아봐야 해 이주, django-eveoltions와 약간 다르게 작동합니다.그것은 당신에게 그것이 하고 있는 모든 것을 보여주고, 복잡한 일에 대해서는 당신의 개입을 요청합니다.정말 좋을 것 같아요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top