mssql table을 가져다 django에서 사용하기
2024. 11. 27. 17:15ㆍdjango/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 모델로 변환
테이블이나 패턴에 맞는 테이블만 선택적으로 모델로 변환
- 특정 테이블만 변환:
python manage.py inspectdb 테이블명1 테이블명2 > models.py
- 여러 테이블을 패턴으로 지정:
# 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
결과를 다른 파일로 저장:
# accounts 앱의 models.py로 저장 python manage.py inspectdb ACCOUNT* > apps/accounts/models.py
임시 파일로 저장
python manage.py inspectdb A* > temp_models.py
```
패턴 매칭은 데이터베이스가 지원하는 와일드카드 문자를 사용합니다:
*
: 임의의 문자열?
: 단일 문자[abc]
: 문자 집합[a-z]
: 문자 범위
'django > Model' 카테고리의 다른 글
MSSQL의 데이터베이스 테이블을 Django 모델로 변환하는 방법 (0) | 2024.11.27 |
---|---|
데이터베이스 설계를 하기 위해서 (1) | 2024.11.14 |
상속을 위한 모델 구성방법 (0) | 2024.10.31 |
class User(AbstractUser) 사용시 ForeignKey 사용법 (0) | 2024.10.30 |
todo = Todo.objects.all() serializer = TodoSerializer(todo, many=True) (0) | 2024.01.31 |