PyMongo est la meilleure solution si vous souhaitez utiliser MongoDB avec Python. La bi­blio­thèque de pilotes standard, à la fois claire et con­vi­viale, vous permet de créer et modifier vos propres bases de données et col­lec­tions 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 al­ter­na­tive à MySQL. Son grand avantage et de laisser le choix du langage de pro­gram­ma­tion pour re­pré­sen­ter 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 col­lec­tions pour une meilleure or­ga­ni­sa­tion. Les dif­fé­rentes commandes MongoDB per­met­tent de récupérer, trier, modifier, regrouper ou supprimer les données.

Comment installer PyMongo ?

Vous souhaitez installer Pymongo afin d’utiliser la bi­blio­thèque de pilotes Python pour tra­vail­ler sous MongoDB ? Alors utilisez le ges­tion­naire 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 Mon­go­Client. La commande adéquate ressemble à ceci (remplacez la mention <<MongoDB URL>> par la chaîne de connexion cor­res­pon­dante) :

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 sup­plé­men­taires. Pour les créer, il suffit d’utiliser le raccourci « db ». Si la base de données men­tion­née existe déjà, elle sera appelée. S’il n’existe pas encore de base de données avec le nom cor­res­pon­dant, MongoDB la crée pour vous. La commande pour une nouvelle base de données nommée « lis­te­clients » 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’au­then­ti­fi­ca­tion à cet em­pla­ce­ment. Les données cor­res­pon­dantes sont en­re­gis­trées par défaut dans la base de données admin. Voici comment insérer une au­then­ti­fi­ca­tion :

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

Ajouter des col­lec­tions avec PyMongo

Une fois la base de données créée, il est facile d’y ajouter des col­lec­tions avec PyMongo. Le système ne les prend en compte que lorsqu’elles con­tien­nent des documents. Pour créer une nouvelle col­lec­tion 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 main­te­nant possible d’alimenter cette nouvelle col­lec­tion. 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 au­to­ma­ti­que­ment un iden­ti­fiant in­di­vi­duel 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 fonc­tionne 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 en­re­gis­trées, le but est de pouvoir les récupérer fa­ci­le­ment 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é­ces­saire de les mettre à jour. PyMongo offre dif­fé­rentes options pour modifier les entrées : en plus des mo­di­fi­ca­tions apportées à un document spé­ci­fique, il est possible de modifier plusieurs ou toutes les entrées d’une base de données ou d’une col­lec­tion spé­ci­fique. 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 chan­ge­ment d’adresse. Supposons donc que le client Martin ait déménagé, toujours à Paris 20. Au lieu de supprimer son ins­crip­tion 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 fonc­tion­ne­ment est similaire aux méthodes de mo­di­fi­ca­tion 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 par­ti­cu­lier. Les commandes cor­res­pon­dantes 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.

Sup­pres­sion de tous les documents d’une col­lec­tion avec PyMongo

Pour supprimer plusieurs entrées d’une col­lec­tion 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 col­lec­tion « clients_france » sont sup­pri­mées mais la col­lec­tion elle-même reste en place. Il est toujours possible d’y ajouter d’autres entrées ou même de supprimer la col­lec­tion dans son in­té­gra­lité.

Aller au menu principal