Overview
En esta guía se puede aprender cómo utilizar PyMongo para serializar tipos personalizados.
La serialización es el proceso de mapear un objeto de Python a un documento BSON para su almacenamiento en MongoDB. PyMongo convierte automáticamente los tipos básicos de Python en BSON cuando insertas un documento en una colección. De manera similar, cuando recuperas un documento de una colección, PyMongo convierte automáticamente el BSON devuelto de nuevo en los tipos de Python correspondientes.
Para obtener una lista completa de asignaciones de Python a BSON, consulte Documentación de la API debson.
Clases Personalizadas
Para serializar y deserializar clases personalizadas de Python, debes implementar una lógica personalizada para gestionar la conversión. Las siguientes secciones muestran cómo serializar y deserializar clases personalizadas.
Serialización de clases personalizadas
Para serializar una clase personalizada, debe convertirla en un diccionario. El siguiente ejemplo serializa una clase personalizada mediante el método vars() y luego inserta el objeto serializado en una colección. Seleccione el Synchronous o la pestaña Asynchronous para ver el código correspondiente:
class Restaurant: def __init__(self, name, cuisine): self.name = name self.cuisine = cuisine restaurant = Restaurant("Example Cafe", "Coffee") restaurant_dict = vars(restaurant) collection.insert_one(restaurant_dict)
class Restaurant: def __init__(self, name, cuisine): self.name = name self.cuisine = cuisine restaurant = Restaurant("Example Cafe", "Coffee") restaurant_dict = vars(restaurant) await collection.insert_one(restaurant_dict)
El ejemplo anterior serializa el objeto Restaurant en el siguiente diccionario:
{'name': 'Example Cafe', 'cuisine': 'Coffee'}
Para obtener más información sobre cómo insertar documentos en una colección, consulte la Guía deinserción de documentos.
Deserializando clases personalizadas
Para deserializar una clase personalizada, hay que convertir el diccionario nuevamente en una instancia de la clase. El siguiente ejemplo recupera un documento de una colección y luego lo convierte nuevamente en un objeto Restaurant del ejemplo anterior. Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente:
def deserialize_restaurant(doc): return Restaurant(name=doc["name"], cuisine=doc["cuisine"]) restaurant_doc = collection.find_one({"name": "Example Cafe"}) restaurant = deserialize_restaurant(restaurant_doc)
def deserialize_restaurant(doc): return Restaurant(name=doc["name"], cuisine=doc["cuisine"]) restaurant_doc = await collection.find_one({"name": "Example Cafe"}) restaurant = deserialize_restaurant(restaurant_doc)
Para obtener más información sobre cómo recuperar documentos de una colección, consulte la guía Buscar documentos.