mssql table을 가져다 django에서 사용하기

2024. 11. 27. 17:15django/Model

MSSQL 데이터베이스의 테이블을 Django models.py로 변환하는 과정을 단계별로 설명

1. 필요한 패키지 설치:

pip install django mssql-django django-mssql-backend pyodbc

2. settings.py 데이터베이스 설정:

DATABASES = {
    'default': {
        'ENGINE': 'mssql',
        'NAME': '데이터베이스명',
        'USER': '사용자명',
        'PASSWORD': '비밀번호',
        'HOST': '서버주소',
        'PORT': '1433',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}

3. MSSQL 테이블을 Django 모델로 자동 변환:

python manage.py inspectdb > models.py

4. 생성된 models.py 예시:

from django.db import models

class AccountMaster(models.Model):
    account_id = models.AutoField(primary_key=True)
    account_code = models.CharField(max_length=10)
    account_name = models.CharField(max_length=100)

    class Meta:
        managed = False  # Django가 테이블을 관리하지 않음
        db_table = 'ACCOUNT_MASTER'  # 실제 MSSQL 테이블명

class Transaction(models.Model):
    trans_id = models.AutoField(primary_key=True)
    trans_date = models.DateTimeField()
    amount = models.DecimalField(max_digits=18, decimal_places=2)

    class Meta:
        managed = False
        db_table = 'TRANSACTION'

5. 필드 타입 매핑 참고:

# MSSQL -> Django 필드 타입
# int -> IntegerField
# bigint -> BigIntegerField
# varchar/nvarchar -> CharField
# text/ntext -> TextField
# decimal/numeric -> DecimalField
# datetime -> DateTimeField
# bit -> BooleanField

6. 데이터 마이그레이션이 필요한 경우:

from django.core.management.base import BaseCommand
from your_app.models import YourModel
import pyodbc

class Command(BaseCommand):
    def handle(self, *args, **kwargs):
        # MSSQL 연결
        conn = pyodbc.connect('your_connection_string')
        cursor = conn.cursor()

        # 데이터 읽기
        cursor.execute('SELECT * FROM your_table')
        rows = cursor.fetchall()

        # Django 모델로 저장
        for row in rows:
            YourModel.objects.create(
                field1=row.field1,
                field2=row.field2
            )

7. 모델 사용 예시:

# views.py
from .models import AccountMaster

def get_accounts(request):
    accounts = AccountMaster.objects.all()
    return render(request, 'accounts.html', {'accounts': accounts})

주의사항:

1. MSSQL 드라이버 설치 필요:

# Ubuntu의 경우
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install -y msodbcsql17

2. 성능 최적화:

# models.py
class OptimizedModel(models.Model):
    index_field = models.CharField(max_length=100, db_index=True)

    class Meta:
        managed = False
        db_table = 'OPTIMIZED_TABLE'
        indexes = [
            models.Index(fields=['index_field'])
        ]

3. 데이터 동기화가 필요한 경우 주기적인 업데이트:

from django.db import transaction

@transaction.atomic
def sync_data():
    # 데이터 동기화 로직
    pass

이러한 방식으로 MSSQL 데이터베이스를 Django 모델로 변환

테이블이나 패턴에 맞는 테이블만 선택적으로 모델로 변환

  1. 특정 테이블만 변환:
  2. python manage.py inspectdb 테이블명1 테이블명2 > models.py
  3. 여러 테이블을 패턴으로 지정:
  4. # A로 시작하는 모든 테이블 python manage.py inspectdb A* > models.py

ACCOUNT로 시작하는 모든 테이블

python manage.py inspectdb ACCOUNT* > models.py

_MASTER로 끝나는 모든 테이블

python manage.py inspectdb *_MASTER > models.py


3. 여러 패턴 동시 지정:
```bash
python manage.py inspectdb A* B* C* > models.py
  1. 결과를 다른 파일로 저장:

    # accounts 앱의 models.py로 저장
    python manage.py inspectdb ACCOUNT* > apps/accounts/models.py

임시 파일로 저장

python manage.py inspectdb A* > temp_models.py

```

패턴 매칭은 데이터베이스가 지원하는 와일드카드 문자를 사용합니다:

  • *: 임의의 문자열
  • ?: 단일 문자
  • [abc]: 문자 집합
  • [a-z]: 문자 범위