-
[Django] 존재하는 테이블 스키마 Django로 복사 방법언어/파이썬 & 장고 2017. 5. 11. 15:24
사전작업
virtualenv로 django를 설치한 경우
Pycharm 내의 터미널을 사용하실 경우 선택된 interpreter에 따라 자동으로 변경되므로 아래와 같은 작업을 할 필요가 없습니다.
예시) djangoDjango라는 virtualenv를 생성한 경우
$ cd virtualenv $ source bin/activate (virtualDjango) $ # virtualDjango라는 virtualenv 터미널에 접속한 상태 # virtualenv 접속해제는 deactivate $ 프로젝트로 이동
터미널
settings 파일이 쪼개져 있지 않은 경우
$ python3 manage.py inspectdb > models.py (아무이름이나 가능)
settings 파일이 쪼개져 있는 경우
$ python3 manage.py inspectdb --settings=djangotest(프로젝트이름).settings.dev > models.py (아무이름이나 가능)
결과
# This is an auto-generated Django model module. # You'll have to do the following manually to clean this up: # * Rearrange models' order # * Make sure each model has one field with primary_key=True # * Make sure each ForeignKey has `on_delete` set to the desired behavior. # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table # Feel free to rename the models, but don't rename db_table values or field names. from __future__ import unicode_literals from django.db import models class TCart(models.Model): cart_no = models.BigAutoField(primary_key=True) user_no = models.BigIntegerField() guest_session_key = models.CharField(max_length=-1) save_mileage_amount = models.BigIntegerField() delivery_amount = models.DecimalField(max_digits=16, decimal_places=2) coupon_sale_amount = models.DecimalField(max_digits=16, decimal_places=2) coupon_save_amount = models.DecimalField(max_digits=16, decimal_places=2) pay_mileage = models.BigIntegerField() pay_deposit = models.BigIntegerField() device_type = models.IntegerField() insert_timestamp = models.DateTimeField() updated_timestamp = models.DateTimeField() is_deleted = models.CharField(max_length=1) class Meta: managed = False db_table = 't_cart' unique_together = (('user_no', 'guest_session_key'),) ....
주의사항
Django로 가져온 테이블의 컬럼 필드와 postgreSQL 내 테이블의 컬럼 필드가 다를 경우가 존재합니다. (예를 들어, varchar(20)인데 text필드로 migrate가 되었다던지..) 따라서 생성한 후 확인 하는 것을 권장합니다.