데이터베이스에서 장고 모델을 생성 할 수 있습니까?


91

나는 집에서 Django와 Django ORM을 엉망으로 만들고 있으며, 사용 편의성 측면에서 최고 중 하나라고 생각합니다.

그러나 "리버스"에서 사용할 수 있는지 궁금합니다.

기본적으로 내가하고 싶은 것은 기존 데이터베이스 스키마 (django를 사용하지 않고 꽤 오래된 프로젝트에서)에서 Django 모델을 생성하는 것입니다.

이것이 가능한가?

업데이트 : 문제 의 데이터베이스는 Oracle입니다.

답변:


107

예, 다음 inspectdb명령을 사용하십시오 .

inspectdb

DATABASE_NAME 설정이 가리키는 데이터베이스의 데이터베이스 테이블을 조사하고 Django 모델 모듈 (models.py 파일)을 표준 출력으로 출력합니다.

Django를 사용하려는 레거시 데이터베이스가있는 경우이를 사용하십시오. 스크립트는 데이터베이스를 검사하고 그 안에있는 각 테이블에 대한 모델을 생성합니다.

예상대로 생성 된 모델에는 테이블의 모든 필드에 대한 속성이 있습니다. inspectdb에는 field-name 출력에 몇 가지 특별한 경우가 있습니다.

[...]


1
해당 정보를 읽으면 mysql, sqlite 및 postgresql에서 지원된다고 말합니다. 내가 사용하려고 슬프게도 데이터베이스 :( 오라클입니다
. TM

oof, 저는 Django가 현재 순방향이든 역방향이든 Oracle을 잘 지원한다고 생각하지 않습니다. /
AlbertoPL

3
Django는 생각할 수있는 거의 모든 기능을 가지고 있습니다. 몇 년 동안 사용해도 여전히 놀랍습니다.
Divick

잘 모르겠지만 ... 링크가 dev버전을 참조한다는 점을 지적해야 할 수도 있습니다 (더 강조하면? 어쩌면 아닐 수도 있습니다 ..).
Federico Gallo

새 테이블을 삽입 할 때 동일한 명령을 사용할 수
있습니까

34

(Django 1.7.1) 단순히 실행 python manage.py inspectdb하면 데이터베이스의 모든 테이블에 대한 클래스가 생성되고 콘솔에 표시됩니다.

 $ python manage.py inspectdb

표준 Unix 출력 리디렉션을 사용하여이를 파일로 저장합니다.

 $ python manage.py inspectdb > models.py

(이것은 mysql 및 django 1.9에서 나를 위해 작동합니다)


10

django의 inspectdb 명령 유틸리티 인 Django Inspectdb Refactor를 기반으로 재사용 가능한 앱을 만들었습니다 .

이렇게하면 기존 데이터베이스에서 모델 폴더 내의 다른 파일로 모델이 분할됩니다. 이렇게하면 모델 수가 많아 질 때 관리하는 데 도움이됩니다.

pip를 통해 설치할 수 있습니다.

pip install django-inspectdb-refactor

그런 다음 settings.py에 앱을 다음과 같이 등록하십시오. inspectdb_refactor

그런 다음 명령 줄에서 다음과 같이 사용할 수 있습니다.

python manage.py inspectdb_refactor --database=your_dbname_defined_in_settings --app=your_app_label

이렇게하면 모든 테이블이 앱 내부에 다른 모델 파일로 포함 된 모델 폴더가 성공적으로 생성됩니다. 예를 들면 :

전형적인 구조

자세한 내용은 여기에서 확인할 수 있습니다 .


여기에 더 많은 설명을 추가하십시오
Mathews Sunny

python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin 오류 : 알 수없는 명령 : 'inspectdb_refactor'사용하려면 'manage.py help'를 입력하십시오.
ali reza

이 앱을 settings.py에 inspectdb_refactor 로 등록 습니까?
not2acoder

이 오류가 발생합니다 get_meta() missing 1 required positional argument: 'is_partition'. django 2.0 사용
LTroya
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.