[파이썬] mongoengine 다양한 데이터 형식의 변환 및 처리

MongoEngine은 Python에서 MongoDB와 상호 작용하기 위한 객체 문서 매핑 (ODM) 라이브러리입니다. MongoDB는 NoSQL 데이터베이스로, 다양한 형식의 데이터를 저장할 수 있습니다. 이 글에서는 MongoEngine을 사용하여 다양한 데이터 형식을 변환하고 처리하는 방법에 대해 알아보겠습니다.

1. 문자열 변환

문자열로 변환하기

MongoEngine은 str 메소드를 통해 객체를 문자열로 변환할 수 있습니다. 예를 들어, Person 클래스의 인스턴스를 문자열로 변환해보겠습니다.

class Person(Document):
    name = StringField()
    age = IntField()

person = Person(name="John", age=30)
person_str = str(person)
print(person_str)

출력 결과:

<Person: {'name': 'John', 'age': 30}>

문자열에서 생성하기

MongoEngine에서 제공하는 from_json 메소드를 통해 JSON 문자열을 기반으로 객체를 생성할 수 있습니다. 예를 들어, 다음과 같이 JSON 문자열을 사용하여 Person 객체를 생성해보겠습니다.

person_json = '{"name": "John", "age": 30}'
person = Person.from_json(person_json)
print(person.name)
print(person.age)

출력 결과:

John
30

2. 날짜 및 시간 변환

MongoDB에서는 datetime 형식을 사용하여 날짜 및 시간 값을 저장합니다. MongoEngine에서는 이를 쉽게 처리할 수 있습니다.

날짜 및 시간으로 변환하기

datetime 모듈의 datetime 클래스를 사용하여 날짜 및 시간 객체를 생성한 뒤, 이를 필드에 할당할 수 있습니다. 예를 들어, Event 클래스에 start_time 필드를 추가해서 이를 처리해보겠습니다.

from datetime import datetime

class Event(Document):
    title = StringField()
    start_time = DateTimeField()

event = Event(title="New Year Party", start_time=datetime(2023, 1, 1, 20, 0, 0))
event.save()

문자열로 변환하기

날짜 및 시간 객체를 문자열로 변환할 때는 strftime 메소드를 사용합니다. 예를 들어, Event 객체의 start_time을 문자열로 변환해보겠습니다.

event = Event.objects.first()
start_time_str = event.start_time.strftime("%Y-%m-%d %H:%M:%S")
print(start_time_str)

출력 결과:

2023-01-01 20:00:00

문자열에서 생성하기

문자열을 날짜 및 시간 객체로 변환할 때는 datetime.strptime 함수를 사용합니다. 예를 들어, 다음과 같이 문자열을 사용하여 start_time 값을 업데이트해보겠습니다.

event = Event.objects.first()
start_time_str = "2024-02-01 19:30:00"
event.start_time = datetime.strptime(start_time_str, "%Y-%m-%d %H:%M:%S")
event.save()

3. 리스트 및 딕셔너리 변환

MongoEngine은 ListFieldDictField를 사용하여 리스트와 딕셔너리 형식의 데이터를 처리할 수 있습니다.

리스트로 변환하기

ListField를 사용하여 리스트 데이터를 처리할 수 있습니다. 예를 들어, Car 클래스에 owners 필드를 추가해 보겠습니다.

class Car(Document):
    model = StringField()
    owners = ListField(StringField())

car = Car(model="Tesla", owners=["John", "Alice"])
car.save()

딕셔너리로 변환하기

DictField를 사용하여 딕셔너리 데이터를 처리할 수 있습니다. 예를 들어, Product 클래스에 properties 필드를 추가해 보겠습니다.

class Product(Document):
    name = StringField()
    properties = DictField()

product = Product(name="Laptop", properties={"brand": "Dell", "memory": "8GB"})
product.save()

결론

이 글에서는 MongoEngine을 사용하여 다양한 데이터 형식을 변환하고 처리하는 방법을 알아보았습니다. 문자열, 날짜 및 시간, 리스트, 딕셔너리 등 다양한 형식의 데이터를 MongoDB에 저장하고 검색하고 처리할 수 있습니다.