Visão geral
Neste guia, você pode aprender como usar o PyMongo para serializar seus tipos personalizados.
Serialização é o processo de mapeamento de um objeto Python para um documento BSON para armazenamento no MongoDB. O PyMongo converte automaticamente tipos básicos do Python em BSON quando você insere um documento em uma coleção. Da mesma forma, quando você recupera um documento de uma coleção, o PyMongo converte automaticamente o BSON retornado de volta nos tipos correspondentes do Python.
Para obter uma lista completa de mapeamentos Python-to-BSON, consulte a bson documentação da API.
Classes personalizadas
Para serializar e desserializar classes Python personalizadas, você deve implementar lógica personalizada para lidar com a conversão. As seções a seguir mostram como serializar e desserializar classes personalizadas.
Serializando classes personalizadas
Para serializar uma classe personalizada, você deve converter a classe em um dicionário. O exemplo seguinte serializa uma classe personalizada utilizando o método vars() e então insere o objeto serializado em uma collection. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
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)
O exemplo anterior serializa o objeto Restaurant no seguinte dicionário:
{'name': 'Example Cafe', 'cuisine': 'Coffee'}
Para saber mais sobre como inserir documentos em uma collection, consulte o guia Inserir documentos .
Deserializando classes personalizadas
Para desserializar uma classe personalizada, você deve converter o dicionário de volta para uma instância da classe. O exemplo a seguir recupera um documento de uma coleção e, em seguida, converte-o novamente em um objeto Restaurant do exemplo anterior. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
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 saber mais sobre como recuperar documentos de uma coleção, consulte o guia Localizar documentos.