ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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가 되었다던지..) 따라서 생성한 후 확인 하는 것을 권장합니다.

    댓글