본문 바로가기
개발일지/SQL

*매우중요 sql, django - 대량 더미 데이터(dummy data) 생성

by 개발에정착하고싶다 2022. 12. 16.
320x100

우선 더미 데이터 라는 말을 먼저 짚고 넘어가겠다.

더미 데이터는 실질적으로 사용하는 데이터는 아니나, 해당 규모의 무언가 있다고 가정하고 실질적으로 사용해보기 위해서

마음대로 조작해도 괜찮은 데이터를 의미한다 (최소한 내가 느낀 느낌으로는)

 

따라서 더미 텍스트는 lorem bla bla처럼 엄청 긴 문장이고

더미 데이터는 내가 원하는 데이터의 종류에 따라서 해당 규모를 테스트하기 위해서 필요한 재료다.

즉, 날려버리건 부숴지건 망가지던 그건 중요하지 않다.


#1 더미데이터를 생성하기에 앞서서 실제 데이터가 2개 이상은 존재해야한다.

 

나의 경우 django 관리자페이지를 통해서 등록된 데이터가

이렇게 있었다.

그리고 일일이 add post를 하기에는 번거로워서

내가 원하는 반복수 만큼 더미 데이터를 생성할 수 있는 방법을 선생님께 배웠다.


#2 데이터를 #1에서 확인했으면 반드시 데이터가 있을것이니 확인해보자

 

데이터가 담겨있는 클래스가 있을것이다.

나의 경우는 Post였다.이 Post라는 클래스는 어떻게 확인했는고 하니

내가 사용하는 앱단위에서 -> models.py에 등록되어있었다.

django에서는 필연적으로 models.py로 데이터를 관리하는 그릇을 만들기 때문이다.

그리고 보통의 경우에는 프로젝트 단위에서는 models.py가 없고 앱단위에서 존재한다.

 

프로젝트단위 > 앱단위 > 파일들

이런 느낌이라고 보면된다.

 

확인 명령어는

터미널에

python manage.py shell

입력으로 shell에 접근하여서

from <app_name>.models import <class_names>

# 실제 내가 사용했던 명령
from instagram.models import Post, Tag
Post.objects.get(pk=1)

로 데이터를 확인해봤다.

물론 admin 페이지에서 id값 = pk값이 1인 데이터가 있는것은 확인했고 (#1의 스크린샷에서도 확인이 가능하다)

다음 단계로 넘어갈 차례다


#3 밑준비를 해주고 실행

 

# 지정한 models.class에 부여된 모든 데이터를 가져오는 명령
<원하는_변수명> = list(<models의class명>.objects.all())

# 내가 사용한 코드
post_list = list(Post.objects.all())
import random

#실제

for <원하는반복인자> in range(원하는반복횟수):
	<원하는변수> = random.choice(<바로전과정에서_전체데이터를담아준변수>
    <원하는변수>.pk = None
    <원하는변수>.save()

# 실제 내가 사용한 코드
for i in range(100):
   ...:     post = random.choice(post_list)
   ...:     post.pk = None
   ...:     post.save()

이렇게 하여서 순식간에 100개에 해당하는 더미 데이터를 만들어냈다.

더미 데이터를 만드는 것은 테스트를할때 매우 유용할테니 숙지하도록 하자.


#4 추가코드 진행 (인터프리터로)

 

In [1]: from gram.models import Post

In [2]: post_list = Post.objects.all()

In [4]: import random

In [5]: for post in post_list:
   ...:     year = random.choice(range(1990, 2023))
   ...:     month = random.choice(range(1,13))
   ...:     post.created_at = post.created_at.replace(year=year, month=month)
   ...:     post.save()
300x250