파이썬의 Pickle은 파이썬 객체 구조를 직렬화(Serialization)하고 역직렬화(Deserialization)하는 데 주로 사용됩니다. 즉, 파이썬 객체를 바이트 스트림(byte stream)으로 변환하여 파일이나 데이터베이스에 저장하거나, 세션 간 프로그램 상태를 유지하거나, 네트워크를 통해 데이터를 전송하는 과정입니다.
이 글에서는 pickle 객체를 저장할 수 있는 Django 필드를 만드는 방법을 알아보겠습니다. 여기서는 models.py와 Django 셸만 사용합니다.
먼저 django-picklefield 패키지를 설치합니다.
pip install django-picklefield
예제
models.py에 다음과 같이 작성합니다.
from django.db import models from picklefield.fields import PickledObjectField # Create your models here. class new_model(models.Model): args = PickledObjectField()
위 코드에서 모델을 생성하고 pickle 필드를 추가했습니다.
이제 실제로 작동하는지 확인해 보겠습니다. 터미널에서 "python manage.py shell" 명령어를 실행한 뒤 아래 코드를 입력합니다.
from myapp.models import *
obj=new_model(args=['fancy', {'objects': 'inside'}]).save()
new_model.objects.all()셸을 실행하여 pickle 객체를 저장할 수 있는 새로운 모델 인스턴스를 생성했습니다. 이 필드에 저장되는 모든 객체는 자동으로 pickle 객체로 변환됩니다.
뷰(view)에서 모델에 데이터를 저장하려면 다음과 같이 작성할 수 있습니다.
from django.http import HttpResponse
def my_view(request):
Object=new_model(args=['fancy',{'name': 'ath'}])
Object.save()
return HttpResponse("Object saved")이 필드에는 어떤 pickle 객체든, 또는 pickle로 직렬화 가능한 모든 데이터를 자유롭게 저장할 수 있습니다.
출력 결과
In [4]: new_model.objects.all() Out[4]:<QuerySet [<new_model: new_model object (1)>]>