[Django] Database

GreenBean·2022년 2월 28일
0
post-thumbnail

Database

기존 데이터베이스를 장고 모델로 생성

  • Django에는 기존 데이터베이스를 분석하여 그에 맞는 모델을 생성해주는 inspectdb 명령어 존재
$ python manage.py inspectdb
  • 이 명령을 실행하려면 먼저 settings.py 파일에 분석하려는 데이터베이스의 접속 정보를 설정해 두어야 함
    • 출력 결과는 생성된 모델의 파이썬 코드
    • 코드를 파이썬 모듈 파일로 저장하려면 다음과 같이 셸의 스트림 리디렉션 기능을 이용
$ python manage.py inspectdb > models.py

또는

$ python manage.py inspectdb --database=DB명 > APP명/models.py
$ python manage.py inspectdb --database=hwaya > projects/models.py
  • 위 명령을 실행하면 분석된 모델이 파이썬 모듈 파일로 현재 디렉토리에 저장
    • 이 파일을 앱의 올바른 위치로 옮긴 뒤, 적절히 수정하여 사용하면 됨

Tip! 추가 내용

  • 특정 테이블만 가져오고 싶을 때
$ python manage.py inspectdb --database=DB명 TABLE명1 TABLE명2 > APP명/models.py 
$ python manage.py inspectdb --database=hwaya users products > projects/models.py

Tip! 주의 사항

  • Django로 가져온 테이블의 컬럼 필드와 PostgreSQL 내 테이블의 컬럼 필드가 다를 경우가 존재
    • 생성한 후 확인 하는 것을 권장
  • 만일 모델에 FK / ManyToMany / OneToMany 등의 연관 관계가 있는 필드는 오류가 나게 됨
    • 가져온 스키마의 정보는 기존 ORM을 그대로 가져 오는것이 아닌 APP명 + TABLE명으로 바뀌게 되기 때문
    • 그래서 해당 연관 관계의 모든 필드에 related_name이 없다면 정의해야 함
  • 테이블 명이 바뀜으로써 연관 관계가 틀어지는데 이 결과 쿼리상의 __set으로 선언했던 inner join의 형식을 모두 바꿔줘야 함
    • ParentsChildern 의 모델이 Family 라는 APP에 등록 되어 있었을 경우
      • 기존 Parent.objects.childern__set.all() 으로 참조 가능했던 쿼리는 FamilyParent.objects.FamilyChildern__set.all() 으로 이름이 바뀐 것
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글