BLOGAnnounced at MongoDB.local NYC 2024: A recap of all announcements and updates — Learn more >

Comment utiliser Python avec MongoDB

Effectuer un suivi à l'aide d'Atlas
Connectez-vous gratuitement dès aujourd’hui

Python, le meilleur langage de programmation pour la data science, et MongoDB, avec son schéma flexible et dynamique, sont parfaitement adaptés à la création d'applications web modernes, d'API JSON et de processeurs de données, pour n'en citer que quelques-uns. MongoDB dispose d'un pilote Python natif et d'une équipe d'ingénieurs qui veillent à ce que MongoDB et Python fonctionnent parfaitement ensemble.

Table des matières
En quoi consiste Python ?

Python, le couteau suisse des langages typés dynamiques actuels, offre une prise en charge complète des tâches courantes de manipulation et de traitement des données, ce qui en fait l'un des meilleurs langages de programmation pour la science des données et le développement Web. Le dictionnaire natif de Python et les types de données de liste le placent juste derrière JavaScript pour la manipulation de documents JSON, et en font un outil idéal pour travailler avec BSON. PyMongo, la bibliothèque de pilotes MongoDB standard pour Python, est facile à utiliser et propose une API intuitive pour accéder aux bases de données, aux collections et aux documents.

Les objets récupérés dans MongoDB par PyMongo sont compatibles avec les dictionnaires et les listes, ce qui nous permet de les manipuler, de les itérer et de les imprimer facilement.

Comment MongoDB stocke les données

MongoDB stocke les données dans les documents de type JSON :

Les dictionnaires Python présentent l'aspect suivant :

Vous trouverez ci-après un aperçu de la manière de mettre en place et d'exploiter le potentiel de cette puissante combinaison.

Conditions préalables

Téléchargez et installez Python sur votre machine. Pour vérifier la conformité de votre installation, tapez python --version sur votre ligne de commande. Vous devriez obtenir quelque chose de similaire à :

Vous pouvez suivre les exemples de ce tutoriel relatifs à Python et MongoDB même si vous ne connaissez pas Python.

Nous vous recommandons de définir un cluster MongoDB cluster de niveau gratuit Atlas pour ce tutoriel.
Lancez dès maintenant votre cluster free tier
En savoir plus sur Atlas
Connexion de Python et MongoDB Atlas

PyMongo dispose d'un ensemble de paquets pour l'interaction entre Python et MongoDB. Pour le tutoriel suivant, commencez par créer un environnement virtuel, puis activez-le.

Maintenant que vous êtes dans votre environnement virtuel, vous pouvez installer PyMongo. Dans votre terminal, tapez :

nous pouvons utiliser PyMongo comme une bibliothèque Python MongoDB dans notre code avec une instruction d'importation.

Création d'une base de données MongoDB dans Python

La première étape pour connecter Python à Atlas consiste à créer un cluster. Vous pouvez suivre les instructions de la documentation pour apprendre à créer et définir votre cluster.

Ensuite, créez un fichier nommé pymongo_get_database.py dans n'importe quel dossier pour écrire du code PyMongo. Vous pouvez utiliser n'importe quel éditeur de texte simple, comme Visual Studio Code.

Créez le client mongodb en ajoutant ce qui suit :

Pour créer un MongoClient, vous aurez besoin d'une chaîne de connexion à votre base de données. Si vous utilisez Atlas, vous pouvez suivre les étapes de la documentation pour obtenir cette chaîne de connexion. Utilisez la chaînedeconnexion pour créer le mongoclient et obtenir la connexion à la base de données MongoDB. Modifiez le nom d'utilisateur, le mot de passe et le nom du cluster.

Dans ce tutoriel Python MongoDB , nous allons créer une liste de courses et ajouter quelques articles. Pour cela, nous avons créé une base de données utilisateur_listedachats.

MongoDB ne crée pas de base de données tant qu'elle ne contient pas de collections et de documents. Créons ensuite une collection.

Création d'une collection dans Python

Pour créer une collection, transmettez le nom de la collection à la base de données. Dans un nouveau fichier appelé PyMongo_test_insert.py, ajoutez le code suivant.

Ceci crée une collection nommée utilisateur_1_articles dans la base de données utilisateur_listedachats.

Insertion de documents dans Python

Pour insérer plusieurs documents à la fois, utilisez la méthode pymongo insert_many().

Insérons un troisième document sans spécifier le champ _id. Cette fois, nous ajoutons un champ de type ‘date’. Pour ajouter une date à l'aide de PyMongo, utilisez le paquet Python dateutil.

Commencez par installer le paquet en utilisant la commande suivante :

Ajoutez ce qui suit à pymongo_test_insert.py:

Nous utilisons la méthode insert_one() pour insérer un seul document.

Ouvrez la ligne de commande et naviguez jusqu'au dossier dans lequel vous avez enregistré pymongo_test_insert.py.

Exécutez le fichier en utilisant la commande :

Connectons-nous à l'UI de MongoDB Atlas et vérifions ce que nous avons jusqu'à présent.

Connectez-vous à votre cluster Atlas et cliquez sur le bouton des collections.

Sur le côté gauche, vous pouvez voir la base de données et le nom de la collection que nous avons créés. Si vous cliquez sur le nom de la collection, vous pouvez également consulter les données :

vue de la base de données et du nom de la collection
visualisation des données par clic

Le champ _id est de type ObjectId par défaut. Si nous ne spécifions pas le champ _id, MongoDB le génère. Les champs présents dans un document ne sont pas tous présents dans les autres. Mais MongoDB ne vous empêche pas de saisir des données — c’est l’essence même d’une base de données sans schéma.

Si nous insérons à nouveau élément_3, MongoDB insérera un nouveau document, avec une nouvelle valeur _id. Cependant, les deux premières insertions généreront une erreur en raison du champ _id, l’identifiant unique.

Requête dans Python

Examinons tous les documents ensemble en utilisant la méthode find(). Pour cela, nous allons créer un fichier séparé pymongo_test_query.py :

Ouvrez la ligne de commande et accédez au dossier où vous avez enregistré pymongo_test_query.py. Exécutez le fichier à l’aide de la commande :

Nous obtenons la liste des objets du dictionnaire en sortie :

liste de dictionnaires

Nous pouvons consulter les données, mais le format n'est pas très bon. Imprimons donc les noms des articles et leur catégorie en remplaçant la ligne print par ce qui suit :

Bien que MongoDB reçoive l'intégralité des données, nous obtenons une "KeyError" de Python sur le troisième document.

Python KeyError

Pour traiter les erreurs de données manquantes dans Python, utilisez pandas.DataFrames. Les DataFrames sont des structures de données 2D utilisées pour des tâches de traitement de données. La méthode PyMongo find() renvoie des objets du dictionnaire qui peuvent être convertis en dataframe en une seule ligne de code.

Installez la bibliothèque pandas comme suit :

Maintenant, importez la bibliothèque pandas en ajoutant la ligne suivante au début du fichier :

Et remplacez le code dans la boucle avec ce qui suit pour traiter KeyError en une étape :

Les erreurs sont remplacées par NaN et NaT pour les valeurs manquantes.

NaN et NaT pour les valeurs manquantes.
indexation dans Python MongoDB

Le nombre de documents et de collections dans une base de données réelle ne cesse d'augmenter. La recherche de documents spécifiques - par exemple, des documents contenant la mention « farine tout usage » parmi leurs ingrédients - dans une très grande collection peut prendre beaucoup de temps. Les index rendent la recherche dans les bases de données plus rapide et plus efficace, et réduisent le coût des requêtes lors des opérations de tri, de comptage et de mise en correspondance.

MongoDB définit des index au niveau de la collection.

Pour que l'index ait plus de sens, il faut ajouter d'autres documents à notre collection. Insérez plusieurs documents à la fois en utilisant la méthode insert_many(). Pour les exemples de documents, copiez le code de Github et exécutez python pymongo_test_insert_more_items.py dans votre terminal.

Disons que nous voulons les articles qui appartiennent à la catégorie ‘food’ :

Pour exécuter la requête ci-dessus, MongoDB doit analyser tous les documents. Pour le vérifier, téléchargez Compass. Connectez-vous à votre cluster en utilisant la chaîne de connexion. Ouvrez la collection et accédez à l'onglet Explain Plan (Plan explicatif). Dans « filter » (filtre), indiquez les critères ci-dessus et affichez les résultats :

Résultats de la requête sans index

Notez que la requête analyse 14 documents pour obtenir cinq résultats.

Créons un index unique dans le champ « category » (catégorie). Dans un nouveau fichier nommé pymongo_index.py, ajoutez le code suivant.

Expliquez à nouveau le même filtre dans l'UI de Compass :

Résultats de la requête avec index

Cette fois-ci, seuls cinq documents sont analysés en raison de l'index des catégories. Nous ne voyons pas de différence significative au niveau du temps d'exécution, en raison du petit nombre de documents. Mais nous constatons une réduction considérable du nombre de documents analysés pour la requête. Les index permettent également d'optimiser les performances des agrégations. Les agrégations n'entrent pas dans le cadre de ce tutoriel, mais en voici un aperçu.

Conclusion

Dans ce tutoriel Python MongoDB, nous avons appris les bases de PyMongo et effectué des opérations simples de base de données. L'étape suivante consiste à explorer l'utilisation de PyMongo pour effectuer des opérations CRUD avec les données de l'entreprise. Si vous n'avez pas suivi ce tutoriel, commencez dès maintenant en installant MongoDB Atlas gratuitement. Il existe également un cours sur ce sujet spécifique à l'adresse MongoDB University.

Prêt à démarrer?

Lancez un nouveau cluster ou migrez vers MongoDB Atlas sans interruption de service et connectez-vous à Python dès aujourd'hui.
Essayer maintenant

FAQ

Comment connecter MongoDB à Python ?

Il existe trois manières de connecter MongoDB à Python :

  • PyMongo
    • Le pilote natif pour connecter MongoDB et Python. PyMongo dispose de toutes les bibliothèques pour effectuer des opérations de base de données à partir du code Python. PyMongo étant un pilote de bas niveau, il est rapide et intuitif et offre plus de contrôle.
  • MongoEngine
    • MongoEngine est un mappeur de documents et d’objets. Nous pouvons définir un schéma qui met en correspondance les objets de l’application et les données du document.
  • Djongo
    • Nous utilisons Djongo pour les applications Web en Python à l’aide du framework Django. Il convertit les requêtes SQL existantes en documents de requêtes MongoDB.

En savoir plus sur l’utilisation de MongoEngine et Djongo.

Quelle est la meilleure base de données pour Python ?

Python fonctionne bien avec différentes bases de données. Le choix dépend des exigences de votre projet. En raison de son schéma flexible et de sa corrélation étroite avec les objets natifs Python, MongoDB est un excellent choix pour les applications Python. Python et MongoDB sont la combinaison parfaite pour les tâches de développement Web.

Pour plus d’informations, consultez notre page Bases de données NoSQL vs SQL. Il existe également des bases de données natives en python, mais leurs capacités sont très limitées et elles sont peu utilisées.

MongoDB est-il adapté à Python ?

MongoDB stocke les données dans des documents de type JSON flexibles et sans schéma. Python possède de riches bibliothèques qui traitent directement les formats de données JSON et BSON. Python s’intègre bien à MongoDB via des pilotes comme PyMongo, MongoEngine, etc.

La rigidité du schéma de base de données étant éliminée, la corrélation de MongoDB avec Python est optimale.

Comment Python stocke-t-il les données dans MongoDB ?

Python stocke les données dans MongoDB via des bibliothèques telles que PyMongo et MongoEngine. Pour les applications Web utilisant le framework Django, nous pouvons utiliser Djongo.

  • PyMongo: PyMongo est le pilote Python natif de la base de données MongoDB. Comme il s’agit d’un pilote de bas niveau, il est plus rapide et constitue le moyen préféré de connecter Python à MongoDB.
  • MongoEngine: MongoEngine permet de créer un schéma (oui, pour une base de données sans schéma). MongoEngine suit l’approche ODM pour mapper les classes d’applications et les documents de base de données.
  • Djongo: Djongo est un transpileur SQL. Vous pouvez migrer des projets SQL existants vers MongoDB sans trop modifier le code.

En savoir plus sur l’utilisation de MongoEngine et Djongo.

Comment utilisez-vous MongoDB avec Python ?
Nous utilisons PyMongo pour connecter MongoDB à Python. Pymongo est le pilote Python natif pour MongoDB. Sa syntaxe est similaire à celle de MongoShell, ce qui nous permet d’établir facilement des corrélations et d’utiliser la bonne méthode. Par exemple, insertMany() sur MongoShell correspond à insert_many() dans PyMongo. Nous pouvons également utiliser MongoEngine et Djongo pour connecter Python et MongoDB. Mais nous préférons PyMongo, car il s’agit d’un pilote de bas niveau qui est plus rapide et offre plus de contrôle. Pour en savoir plus sur PyMongo, consultez notre documentation sur PyMongo.
Comment obtenir des données de MongoDB en utilisant Python ?

La méthode la plus efficace et la plus simple pour se connecter à MongoDB en Python est d’utiliser PyMongo. PyMongo est le pilote Python natif pour MongoDB. Pour établir la connexion, nous utilisons la commande pymongo.MongoClient() avec l’argument connection_string. Ensuite, nous pouvons utiliser la méthode find() pour obtenir les documents requis. Exemple :

Importer Pymongo

# Se connecter à MongoDB depuis Python à l’aide de Pymongo
client = pymongo.MongoClient(CONNECTION_STRING)
# Ouvrir la base de données
dbname = client[’user_shopping_list’]
# Récupérer la collection
collection_name = dbname["item_details"]
# Récupérer les données de la collection
item_details = collection_name.find()import pymongo 

# Se connecter à mongodb depuis python en utilisant pymongo
 client = pymongo.MongoClient(CONNECTION_STRING)
# Ouvrir la base de données
dbname = client[’user_shopping_list’]
# Récupérer la collection
collection_name = dbname["item_details"]
# Récupérer les données de la collection
item_details = collection_name.find()
Comment insérer des données dans MongoDB à l’aide de Python ?

Pour insérer des données, connectez MongoDB et Python à l’aide de PyMongo. PyMongo est le pilote Python natif pour MongoDB. Une fois connectés, nous pouvons utiliser les méthodes de PyMongo comme insert_one() et insert_many(). Exemple :

# Obtenir le mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Récupérer/créer une base de données
dbname = client[’user_shopping_list’]

# Récupérer/créer une collection
collection_name = dbname["item_details"]

# Créer le document
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# Insérer une ligne
collection_name.insert_one(item_1)# Obtenir le mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Récupérer/créer une base de données
dbname = client[’user_shopping_list’]

# Récupérer/créer une collection
collection_name = dbname["item_details"]

# Créer le document
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# Insérer une ligne
collection_name.insert_one(item_1)
Comment créer une base de données dans MongoDB en utilisant Python ?

Nous utilisons le pilote PyMongo pour créer une base de données MongoDB à l’aide du code Python. Exemple :

importer Pymongo

# Obtenir le mongoclient
client = pymongo. MongoClient(CONNECTION_STRING)

# Récupérer/créer une base de données
dbname = client[’user_shopping_list’]import pymongo

# Obtenir le mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Récupérer/créer une base de données
dbname = client[’user_shopping_list’]
Différence entre les bases de données SQL et les bases de données NoSQL

Les bases de données SQL sont également appelées relational databases et les bases de données NoSQL (« non SQL » ou « pas seulement SQL ») sont aussi appelées non-relational databases. Les terme relationnel est employé par référence au « modèle de données relationnelles » en mathématiques sur lequel s’appuient ces bases de données.

Les bases de données SQL stockent les données sous forme de tables contenant des lignes et des colonnes fixes. Il existe plusieurs types de bases de données NoSQL, par exemple :

  1. Type de document : documents JSON

  2. Clé-valeur : paires clé-valeur

  3. Orientée colonnes : le magasin de données orienté colonnes comporte des tables avec des lignes et des colonnes dynamiques

Exemples de bases de données SQL : MySQL, Microsoft SQL Server, PostgreSQL et SQLite. Exemples de bases de données NoSQL : MongoDB, CouchDB, Redis, DynamoDB

Pour une comparaison plus détaillée, veuillez consulter la page SQL vs NoSQL.