Gestion de données
Partie N°4 - Effectuer des requêtes depuis
Python
1. Présentation et installation
Présentation
PyMongo est une librairie Python contenant des outils pour travailler avec MongoD, elle est maintenue
par les développeurs de MongoDB officiel ce qui en fait la référence dans Python :
https://www.mongodb.com/docs/drivers/pymongo/
Python a besoin de la librairie pymongo pour accéder à une base de données MongoDB.
Installation de PyMongo
Pour installer PyMongo taper la commande suivant dans votre terminal :
python -m pip install pymongo
Pour tester si l'installation a réussi, créer et exécuter une page Python avec le contenu suivant :
import pymongo
Réalisé Par : SOUFIANE AIT TALEB Page 1 sur 12
Gestion de données
2. Connexion au serveur de base de données MongoDB
Créer la connexion
La première étape consiste à créer une connexion avec nos bases de données sur le serveur de
MongoDB. Pour cela il faut :
1. Créer un objet de la classe MongoClient de la librairie pymongo.
2. Passer comme paramètre à l’objet MongoClient la chaîne de connexion vers le serveur
MongoDB. Pour cela vous avez plusieurs façons :
client = pymongo.MongoClient("mongodb://localhost:27017")
client = pymongo.MongoClient(host='localhost', port=27017)
client = pymongo.MongoClient() # se connecte par défaut au serveur local
client = pymongo.MongoClient("mongodb://[user:password@]localhost:27017/")
Exemple 1 :
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017")
print(client)
----------------------------------------------------------------------------------
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False,
connect=True)
----------------------------------------------------------------------------------
Exemple 2 :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
print(client)
----------------------------------------------------------------------------------
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False,
connect=True)
----------------------------------------------------------------------------------
Afficher les bases de données du serveur MongoDB
Dans python on peut afficher la liste des bases de données qui se trouve sur le serveur à l’aide de la
méthode list_database_names() de l’objet MongoClient.
Exemple :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
print(client.list_database_names())
----------------------------------------------------------------------------------
['admin', 'coffeeshop', 'config', 'local', 'myDB']
----------------------------------------------------------------------------------
L’objet client est une instance de la classe MongoClient où on retrouve les informations de la connexion.
Réalisé Par : SOUFIANE AIT TALEB Page 2 sur 12
Gestion de données
Se connecter à une base de données MongoDB
Pour se connecter à une base de données on peut utiliser les deux syntaxes suivantes :
my_database = MongoClient_object['database_name']
my_database = MongoClient_object.database_name
Exemple 1 :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client['coffeeshop']
print(my_db)
----------------------------------------------------------------------------------
Database(MongoClient(host=['localhost:27017'], document_class=dict,
tz_aware=False, connect=True), 'coffeeshop')
----------------------------------------------------------------------------------
Exemple 2 :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client.coffeeshop
print(my_db)
----------------------------------------------------------------------------------
Database(MongoClient(host=['localhost:27017'], document_class=dict,
tz_aware=False, connect=True), 'coffeeshop')
----------------------------------------------------------------------------------
L’objet my_db est une instance de la classe Database.
Afficher les collections de la base de données
Dans python on peut afficher les collections d’une base de données MongoDB on utiliser la méthode
list_collection_names() de l’objet Database.
Exemple 1 :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client['coffeeshop']
print(my_db.list_collection_names())
----------------------------------------------------------------------------------
['sales']
----------------------------------------------------------------------------------
Réalisé Par : SOUFIANE AIT TALEB Page 3 sur 12
Gestion de données
Accéder à une collection d’une base de données MongoDB
Pour accéder à une collection on peut utiliser les deux syntaxes suivantes :
my_collection = my_database_object['collection_name']
my_collection = my_database_object.collection_name
Exemple 1 :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client['coffeeshop']
my_collection = my_db['sales']
print(my_collection)
----------------------------------------------------------------------------------
Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict,
tz_aware=False, connect=True), 'coffeeshop'), 'sales')
----------------------------------------------------------------------------------
Exemple 2 :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client['coffeeshop']
my_collection = my_db.sales
print(my_collection)
----------------------------------------------------------------------------------
Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict,
tz_aware=False, connect=True), 'coffeeshop'), 'sales')
----------------------------------------------------------------------------------
L’objet my_collection est une instance de la classe Collection.
Créer une base de données MongoDB
Pour créer une base de données dans MongoDB, on utilise la même syntaxe pour accéder à une base
de données MongoDB avec l’objet MongoClient, et MongoDB va créer la base de données si elle
n'existe pas.
Exemple :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db_name = input("Database name to create : ")
db_list = client.list_database_names()
if my_db_name in db_list:
print("The database exists.")
else:
my_db = client[my_db_name];
print("Database created successfully.")
Réalisé Par : SOUFIANE AIT TALEB Page 4 sur 12
Gestion de données
----------------------------------------------------------------------------------
Database name to create : coffeeshop
The database exists.
----------------------------------------------------------------------------------
Database name to create : shop
Database created successfully.
----------------------------------------------------------------------------------
Dans MongoDB, une base de données n'est pas créée tant qu'elle n'a pas de contenu. Donc on doit
créer aussi une collection avec des documents.
Créer une collection dans une base de données MongoDB
Pour créer une collection dans une base de données MongoDB, on utilise la même syntaxe pour accéder
à une collection avec l’objet Database, et MongoDB va créer la collection si elle n'existe pas.
Exemple :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["coffeeshop"];
my_collection_name = input("Collection name to create : ")
collection_list = my_db.list_collection_names()
if my_collection_name in collection_list:
print("The collection exists.")
else:
my_collection = my_db[my_collection_name];
print("Collection created successfully.")
----------------------------------------------------------------------------------
Collection name to create : sales
The collection exists.
----------------------------------------------------------------------------------
Collection name to create : ventes
Collection created successfully.
----------------------------------------------------------------------------------
On remarque aussi que la collection n’est pas créée tant qu'elle n'a pas de contenu.
Réalisé Par : SOUFIANE AIT TALEB Page 5 sur 12
Gestion de données
3. Requêtes depuis Python
Insérer dans une collection
Pour insérer un document dans une collection on utilise les deux méthodes :
▪ Collection_object.insert_one({object_1}) : pour insérer un seul document
▪ Collection_object.insert_many([{object_1},{object_2}, …]) : pour insérer plusieurs
documents.
Exemple 1 :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
student1_ = {
"_id":101,
"name": "Mike",
"age": 30,
"gender": "Male",
"graduated": False,
"address": {
"street": "123 Main Street",
"city": "Start City"
},
"courses": ["C#", "SQL", "PHP" ]
}
x= students.insert_one(student1_)
print(x)
----------------------------------------------------------------------------------
<pymongo.results.InsertOneResult object at 0x0000028FA8657B50>
----------------------------------------------------------------------------------
Exemple 2 :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
students_list = [{
"_id":102,
"name": "Mary",
"age": 28,
Réalisé Par : SOUFIANE AIT TALEB Page 6 sur 12
Gestion de données
"gender": "Female",
"graduated": True,
"address": {
"street": "99 George Street",
"city": "Super City"
},
"courses": [ "ASP.NET", "LINQ", "Angular" ]
},
{
"_id":103,
"name": "Pam",
"age": 29,
"gender": "Female",
"graduated": False,
"address": {
"street": "101 King Street",
"city": "Mongo City"
},
"courses": [".NET Core", "C++", "Bootstrap" ]
},
{
"_id":104,
"name": "Ben",
"age": 31,
"gender": "Male",
"graduated": True,
"address": {
"street": "35 Queen Street",
"city": "London"
},
"courses": ["JavaScript", "C#", "HTML" ]
}
]
x= students.insert_many(students_list)
print(x)
----------------------------------------------------------------------------------
<pymongo.results.InsertManyResult object at 0x0000023D93B43F70>
----------------------------------------------------------------------------------
Réalisé Par : SOUFIANE AIT TALEB Page 7 sur 12
Gestion de données
Afficher les documents d’une collection
Pour afficher les documents d’une collection on peut utiliser les deux méthodes suivantes :
▪ Collection_name.find({query},{prejection})
▪ Collection_name.find_one({query},{prejection})
Exemple 1 : afficher les documents de la collection students
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
result = students.find_one()
print(result)
results = students.find()
print(results)
for student in results:
print(student,end='\n\n')
----------------------------------------------------------------------------------
{'_id': 101, 'name': 'Mike', 'age': 30, 'gender': 'Male', 'graduated': False,
'address': {'street': '123 Main Street', 'city': 'Start City'}, 'courses': ['C#',
'SQL', 'PHP']}
<pymongo.cursor.Cursor object at 0x0000025ACAE179A0>
{'_id': 101, 'name': 'Mike', 'age': 30, 'gender': 'Male', 'graduated': False,
'address': {'street': '123 Main Street', 'city': 'Start City'}, 'courses': ['C#',
'SQL', 'PHP']}
{'_id': 102, 'name': 'Mary', 'age': 28, 'gender': 'Female', 'graduated': True,
'address': {'street': '99 George Street', 'city': 'Super City'}, 'courses':
['ASP.NET', 'LINQ', 'Angular']}
{'_id': 103, 'name': 'Pam', 'age': 29, 'gender': 'Female', 'graduated': False,
'address': {'street': '101 King Street', 'city': 'Mongo City'}, 'courses': ['.NET
Core', 'C++', 'Bootstrap']}
{'_id': 104, 'name': 'Ben', 'age': 31, 'gender': 'Male', 'graduated': True,
'address': {'street': '35 Queen Street', 'city': 'London'}, 'courses':
['JavaScript', 'C#', 'HTML']}
----------------------------------------------------------------------------------
Réalisé Par : SOUFIANE AIT TALEB Page 8 sur 12
Gestion de données
Exemple 2 : afficher seulement les documents avec l’âge inférieur ou égale à 29 et projeter seulement
les champs : name et age
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
for student in students.find({"age":{"$lte":29}},{"name":1, "age":1,"_id":0}):
print(student,end='\n\n')
----------------------------------------------------------------------------------
{'name': 'Mary', 'age': 28}
{'name': 'Pam', 'age': 29}
----------------------------------------------------------------------------------
Exemple 3 : afficher les informations de l’étudiant le plus âgé. La méthode sort("field" :1|-1) permet
de faire un tri avec ordre croissant si la valeur égale à 1 ou bien un tri décroissant si -1
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
results = students.find().sort("age",-1).limit(1)
for student in results :
print(student)
----------------------------------------------------------------------------------
{'_id': 104, 'name': 'Ben', 'age': 31, 'gender': 'Male', 'graduated': True,
'address': {'street': '35 Queen Street', 'city': 'London'}, 'courses':
['JavaScript', 'C#', 'HTML']}
----------------------------------------------------------------------------------
Modifier les documents d’une collection
Il existe deux méthodes pour modifier les documents dans une base de données MongoDB :
▪ Collection_object.update_one({Selection_Criteria},{"$set" : {Update_Data}}) : modifier un
seul document dans la collection.
▪ Collection_object.update_many({Selection_Criteria},{"$set" : {Update_Data}}) : modifier
plusieurs documents dans la collection.
Réalisé Par : SOUFIANE AIT TALEB Page 9 sur 12
Gestion de données
Exemple 1 : On veut modifier l’âge de l’étudiant avec _id=102 :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
print(students.find_one({"_id":102}))
students.update_one({"_id":102},{"$set":{"age":30}})
print()
print(students.find_one({"_id":102}))
----------------------------------------------------------------------------------
{'_id': 102, 'name': 'Mary', 'age': 28, 'gender': 'Female', 'graduated': True,
'address': {'street': '99 George Street', 'city': 'Super City'}, 'courses':
['ASP.NET', 'LINQ', 'Angular']}
{'_id': 102, 'name': 'Mary', 'age': 30, 'gender': 'Female', 'graduated': True,
'address': {'street': '99 George Street', 'city': 'Super City'}, 'courses':
['ASP.NET', 'LINQ', 'Angular']}
----------------------------------------------------------------------------------
Exemple 2 : On veut modifier mette à jour tous les documents dont le nom commence par la lettre
"M":
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
query = {"name":{"$regex":"^M"}}
update = {"$set":{"address.city":"Alpha City"}}
x = students.update_many(query,update)
print(x.modified_count, "documents updated.")
----------------------------------------------------------------------------------
2 documents updated.
----------------------------------------------------------------------------------
Réalisé Par : SOUFIANE AIT TALEB Page 10 sur 12
Gestion de données
Supprimer les documents d’une collection
Il existe deux méthodes pour supprimer les documents d’une collection MongoDB :
▪ Collection_object.delete_one({query}) : supprimer un seul document dans la collection.
▪ Collection_object.delete_many({query}) : supprimer plusieurs documents dans la collection.
Exemple 1 : Supprimer le premier élément de la collection students où le cham name égale à "Mary"
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
x = students.delete_one({"name":"Mary"})
print(x.deleted_count, "document deleted.")
----------------------------------------------------------------------------------
1 document deleted.
----------------------------------------------------------------------------------
Exemple 2 : Supprimer tous les éléments de la collection students dont le champ age est inférieur pu
égale à 30 :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
x = students.delete_many({"age":{"$lte":30}})
print(x.deleted_count, "documents deleted.")
----------------------------------------------------------------------------------
2 documents deleted.
----------------------------------------------------------------------------------
Réalisé Par : SOUFIANE AIT TALEB Page 11 sur 12
Gestion de données
Utiliser l’agrégation
On va travailler dans cette partie dans la base de données coffeeshop.
Exemple : on veut regrouper les ventes par item et afficher le total des quantités pour chaque item :
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
my_db = client["coffeeshop"]
sales = my_db["sales"]
results =
sales.aggregate([{"$group":{"_id":"$item","totalQuantity":{"$sum":"$quantity"}}}])
for result in results:
print(result,end='\n\n')
----------------------------------------------------------------------------------
{'_id': 'Cappuccino', 'totalQuantity': 49}
{'_id': 'Mochas', 'totalQuantity': 11}
{'_id': 'Americanos', 'totalQuantity': 70}
{'_id': 'Lattes', 'totalQuantity': 55}
----------------------------------------------------------------------------------
Réalisé Par : SOUFIANE AIT TALEB Page 12 sur 12