PyMongo : utiliser Python avec MongoDB

PyMongo est la meilleure solution si vous souhaitez utiliser MongoDB avec Python. La bibliothèque de pilotes standard, à la fois claire et conviviale, vous permet de créer et modifier vos propres bases de données et collections en quelques étapes seulement.

Qu’est-ce que PyMongo ?

Au cours des dernières années, le système de gestion de base de données MongoDB s’est imposé comme une véritable alternative à MySQL. Son grand avantage et de laisser le choix du langage de programmation pour représenter des objets grâce à des pilotes adaptés. PyMongo est ainsi le pilote officiel pour utiliser MongoDB avec Python.

Remarque

MongoDB stocke les données sous forme de documents JSON, regroupés et indexés dans des collections pour une meilleure organisation. Les différentes commandes MongoDB permettent de récupérer, trier, modifier, regrouper ou supprimer les données.

Comment installer PyMongo ?

Vous souhaitez installer Pymongo afin d’utiliser la bibliothèque de pilotes Python pour travailler sous MongoDB ? Alors utilisez le gestionnaire de paquets PIP de Python. Celui-ci vous permet d’installer PyMongo à tout moment sur l’appareil ou le serveur d’exécution de MongoDB. Voici la commande à utiliser :

python -m pip install pymongo

Pymongo : créer des bases de données MongoDB

Après avoir installé PyMongo, connectez-vous à MongoDB. Pour cela, utilisez le MongoClient. La commande adéquate ressemble à ceci (remplacez la mention <<MongoDB URL>> par la chaîne de connexion correspondante) :

from pymongo import MongoClient
database = MongoClient (‘<<MongoDB URL>>‘)

Il existe trois bases de données standard dans MongoDB : local, admin et config. Mais si vous souhaitez utiliser MongoDB de manière vraiment efficace avec Python, vous aurez besoin de bases de données supplémentaires. Pour les créer, il suffit d’utiliser le raccourci « db ». Si la base de données mentionnée existe déjà, elle sera appelée. S’il n’existe pas encore de base de données avec le nom correspondant, MongoDB la crée pour vous. La commande pour une nouvelle base de données nommée « listeclients » se présente comme suit :

db = client.listeclients

Pour mieux protéger vos données, il est possible de mettre en place une procédure d’authentification à cet emplacement. Les données correspondantes sont enregistrées par défaut dans la base de données admin. Voici comment insérer une authentification :

connection = MongoClient ("localhost",
username = "user",
password = "password",
authSource = "admin",
authMechanism = "SCRAM-SHA-256")

Ajouter des collections avec PyMongo

Une fois la base de données créée, il est facile d’y ajouter des collections avec PyMongo. Le système ne les prend en compte que lorsqu’elles contiennent des documents. Pour créer une nouvelle collection dans MongoDB avec Python, utilisez l’entrée suivante :

collection = database ["clients_france"]

Insérer des entrées de base de données avec PyMongo

Il est maintenant possible d’alimenter cette nouvelle collection. Les nouveaux documents y sont déposés et peuvent être consultés, combinés ou modifiés selon les besoins. Voici un exemple de document :

InfoClient = {
"nom" : "Martin",
"adresse" : "252 rue des Pyrénées",
"cp" : "75020",
"ville" : "Paris"
}
collection.insert_one(infoclient)

La méthode « insert_many » permet aussi d’ajouter plusieurs entrées en même temps. Chacune de ces entrées reçoit automatiquement un identifiant individuel et unique (_id), clé unique avec laquelle il est possible de l’appeler par la suite. Ajouter des entrées de manière groupée fonctionne ainsi :

InfoClient = [
{
"nom" : "Martin",
"adresse" : "252 rue des Pyrénées",
"cp" : "75020",
"ville" : "Paris"
}
{
"nom" : "Richard",
"adresse" : "27 rue de la Rotonde",
"cp" : "13001",
"ville" : "Marseille"
}
{
"nom" : "Picard",
"adresse" : "18 rue Victor Hugo",
"cp" : "69002",
"ville" : "Lyon"
}
]
collection.insert_many(infoclient)

PyMongo pour appeler les données

Une fois les données enregistrées, le but est de pouvoir les récupérer facilement par la suite. Pour cela, il existe plusieurs moyens, dont le plus pratique est sans doute avec MongoDB Find. Voici comment l’utiliser avec l’exemple ci-dessus :

data = collection.find ( { "ville" : "Paris" } )
print (data)
# {
"_id" : ObjectID ("7fe4a462991acf79e22c" ),
"nom" : "Martin", "adresse" : "252 rue des Pyrénées",
"cp" : "75020",
"ville" : "Paris"
}

Modifier les entrées sous MongoDB avec PyMongo

Les données évoluent au cours du temps et il peut se révéler nécessaire de les mettre à jour. PyMongo offre différentes options pour modifier les entrées : en plus des modifications apportées à un document spécifique, il est possible de modifier plusieurs ou toutes les entrées d’une base de données ou d’une collection spécifique. On utilise pour cela les méthodes « update_one » et « update_many ».

Exemple avec update_one

Pour illustrer la méthode « update_one », faisons un simple changement d’adresse. Supposons donc que le client Martin ait déménagé, toujours à Paris 20. Au lieu de supprimer son inscription puis de la créer à nouveau, il est possible de la modifier de la façon suivante :

import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "listeclient" ]
mycol = mydb [ "clients_france" ]
myquery = { "adresse" : "252 rue des Pyrénées" }
newvalues = { "$set" : { "adresse" : "12 rue Belgrand" } }
mycol.update_one (myquery, newvalues)
#print "customer" after the update:
for x in mycol.find ():
print (x)

Exemple avec update_many

La commande « update_many » permet de modifier tous les documents qui répondent à un certain critère. Dans l’exemple suivant, il s’agit d’attribuer une nouvelle ville à toutes les entrées client dont le nom commence par M :

import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "listeclients" ]
mycol = mydb [ "clients_france" ]
myquery = { "nom" : "$regex" : "^M" }
newvalues = { "$set" : { "ville" : "Lille" } }
x = mycol.update_many (myquery, newvalues)
print (x.modified_count, "documents updated.")

Effacer des documents avec PyMongo

Il est aussi possible de supprimer des documents. Le fonctionnement est similaire aux méthodes de modification d’une entrée ou de plusieurs : il suffit de trier les documents selon un ou plusieurs critères pour les supprimer tous, ou en supprimer seulement un en particulier. Les commandes correspondantes sont « delete_one » et « delete_many ».

Exemple avec delete_one

Pour supprimer un document avec PyMongo, voici comment faire :

import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "listeclients" ]
mycol = mydb [ "clients_france" ]
myquery = { "adresse" : "252 rue des Pyrénées" }
mycol.delete_one (myquery)

Dans cet exemple, l’entrée avec l’adresse « 252 rue des Pyrénées » sera supprimée. Les autres entrées restent telles quelles.

Suppression de tous les documents d’une collection avec PyMongo

Pour supprimer plusieurs entrées d’une collection MongoDB avec PyMongo, voici comment faire :

import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "listeclients" ]
mycol = mydb [ "clients_france" ]
x = mycol.delete_many ( { } )
print (x.deleted_count, "documents effacés.")

Dans cet exemple, toutes les entrées de la collection « clients_france » sont supprimées mais la collection elle-même reste en place. Il est toujours possible d’y ajouter d’autres entrées ou même de supprimer la collection dans son intégralité.