Fermer

juin 1, 2018

Premiers pas avec Python et MongoDB –


Cet article a été publié à l'origine le MongoDB . Nous vous remercions de soutenir les partenaires qui rendent SitePoint possible.

Vous pouvez commencer avec MongoDB et votre langage de programmation favori en tirant parti de ses pilotes dont beaucoup sont gérés par des ingénieurs MongoDB, et d'autres sont entretenus par des membres de la communauté. MongoDB dispose d'un pilote Python natif, PyMongo, et d'une équipe d'ingénieurs Driver dédiée à adapter le pilote aux besoins de la communauté Python.

Dans cet article, destiné aux développeurs Python qui sont nouveaux dans MongoDB, vous apprendrez comment faire ce qui suit:

  • Créer une base de données MongoDB hébergée gratuitement en utilisant MongoDB Atlas
  • Installer PyMongo, le pilote Python [19659005] Connectez-vous à MongoDB
  • Explorez les collections et documents MongoDB
  • Effectuez des opérations de base Créer, Récupérer, Mettre à jour et Supprimer (CRUD) en utilisant PyMongo

Commençons!

Vous pouvez commencer à travailler immédiatement avec MongoDB en utilisant un cluster MongoDB gratuit via MongoDB Atlas. MongoDB Atlas est un service de base de données hébergé qui vous permet de choisir la taille de votre base de données et d'obtenir une chaîne de connexion! Si vous souhaitez utiliser le niveau gratuit, suivez les instructions de la section Annexe à la fin de cet article.

Installer le pilote Python

Pour cet article, nous allons installer le pilote Python appelé "PyMongo".

Bien qu'il existe d'autres pilotes écrits par la communauté, PyMongo est le pilote officiel Python pour MongoDB. Pour une documentation détaillée du pilote, consultez la documentation ici .

Le moyen le plus simple d'installer le pilote est le système de gestion de paquets pip. Exécutez ce qui suit sur une ligne de commande:

 python -m pip install pymongo

Note: Si vous utilisez le cluster Atlas M0 (Free Tier), vous devez utiliser Python 2.7.9+ et utiliser Python 3.4 ou plus récent. Vous pouvez vérifier la version de Python et PyMongo que vous avez installée en émettant respectivement les commandes python --version et pip list .

Pour les variantes d'installation du pilote, consultez le documentation complète :

Une fois PyMongo installé, nous pouvons écrire notre première application qui retournera des informations sur le serveur MongoDB. Dans votre environnement de développement Python ou à partir d'un éditeur de texte, entrez le code suivant:

 from pymongo import MongoClient
La bibliothèque # pprint est utilisée pour rendre la sortie plus jolie
à partir de pprint import pprint
# se connecter à MongoDB, modifier le <> pour refléter votre propre chaîne de connexion
client = MongoClient (<>)
db = client.admin
# Emettez la commande serverStatus et imprimez les résultats
serverStatusResult = db.command ("serverStatus")
pprint (serverStatusResult)

Remplacez <> par votre chaîne de connexion à MongoDB. Enregistrez ce fichier en tant que mongodbtest.py et exécutez-le à partir de la ligne de commande via python mongodbtest.py .

Un exemple de sortie apparaît comme suit:

 {u'asserts ' : {u'msg ': 0,
              u'regular ': 0,
              'rollovers': 0,
              u'user ': 0,
              u'warning ': 0},
 u'connections ': {u'available': 96, u'current ': 4, u'totalCreated': 174L},
 u'extra_info ': {u'note': les u'fields varient selon la plateforme ', u'page_faults': 0},
 u'host ': u'cluster0-shard-00-00-6czvq.mongodb.net: 27017',
 u'localTime ': datetime.datetime (2017, 4, 4, 0, 18, 45, 616000),
.
.
.
}

Notez que le caractère u provient de la sortie Python et que les chaînes sont stockées en Unicode. Cet exemple utilise également la bibliothèque pprint qui n'est pas liée à MongoDB mais qui est utilisée ici uniquement pour rendre la sortie structurée et visuellement attrayante à partir d'une console.

Dans cet exemple, nous nous connectons à notre instance MongoDB et émettons la commande db.serverStatus () ( ). Cette commande renvoie des informations sur notre instance MongoDB et est utilisée dans cet exemple pour exécuter une commande sur MongoDB.

Si votre application fonctionne correctement, vous êtes prêt à continuer!

Exploration de collections et de documents

MongoDB stocke des données dans des documents. Les documents ne sont pas comme les documents Microsoft Word ou Adode PDF mais plutôt les documents JSON basés sur la spécification JSON .

Un exemple d'un document JSON serait comme suit:

 Exemple de document JSON

Notez que les documents ne sont pas simplement des paires clé / valeur, mais peuvent inclure des tableaux et des sous-documents. Les données elles-mêmes peuvent être des types de données différents comme géospatial, décimal, et ISODate pour n'en nommer que quelques-uns. En interne, MongoDB stocke une représentation binaire de JSON connue sous le nom de BSON. Cela permet à MongoDB de fournir des types de données tels que decimal qui ne sont pas définis dans la spécification JSON. Pour plus d'informations sur la spécification BSON consultez son site .

Une collection dans MongoDB est un conteneur pour les documents. Une base de données est le conteneur pour les collections. Ce regroupement est similaire aux bases de données relationnelles et est illustré ci-dessous:

Concept relationnel Équivalent MongoDB
Base de données Base de données Tables Collections
Lignes Documents
Index Index

Il y a de nombreux avantages à stocker des données dans des documents. Bien qu'une discussion plus approfondie soit hors de la portée de cet article, certains de ses avantages, tels que le schéma dynamique et flexible, et la possibilité de stocker des tableaux peuvent être vus à partir de nos simples scripts Python. Pour plus d'informations sur la structure du document MongoDB consultez la documentation en ligne .

Jetons un coup d'œil sur la façon d'effectuer des opérations CRUD de base sur des documents dans MongoDB en utilisant PyMongo

Exécuter des opérations CRUD de base en utilisant PyMongo

Pour établir une connexion avec MongoDB avec PyMongo, vous utilisez la classe MongoClient. à partir de pymongo import MongoClient
client = MongoClient ('<>')

<> est un espace réservé pour la chaîne de connexion à MongoDB. Voir la documentation de la chaîne de connexion pour des informations détaillées sur la façon de créer votre chaîne de connexion MongoDB. Si vous utilisez Atlas pour votre base de données MongoDB, consultez la section "tester votre connexion" pour plus d'informations sur l'obtention de la chaîne de connexion pour MongoDB Atlas.

Nous pouvons maintenant créer un objet de base de données référençant une nouvelle base de données affaire comme suit:

 db = client.business

Une fois que nous créons cet objet, nous pouvons effectuer nos opérations CRUD. Puisque nous voulons quelque chose d'utile à interroger, commençons par construire un exemple d'application de générateur de données.

Exemple de code de données de génération de génération

Créez un nouveau fichier appelé createsamples.py en utilisant votre outil de développement ou votre éditeur de ligne de commande et copiez le code suivant:

 de pymongo import MongoClient
à partir de rand import aléatoire
#Etape 1: Se connecter à MongoDB - Note: Changer la chaîne de connexion si nécessaire
client = MongoClient (port = 27017)
db = client.business
#Etape 2: Créer des exemples de données
noms = ['Kitchen','Animal','State', 'Tastey', 'Big','City','Fish', 'Pizza','Goat', 'Salty','Sandwich','Lazy', 'Fun']
company_type = ['LLC','Inc','Company','Corporation']
company_cuisine = ['Pizza', 'Bar Food', 'Fast Food', 'Italian', 'Mexican', 'American', 'Sushi Bar', 'Vegetarian']
pour x dans xrange (1, 501):
    affaires = {
        'name': noms [randint(0, (len(names)-1))] + '' + noms [randint(0, (len(names)-1))] + '' + company_type [randint(0, (len(company_type)-1))],
        'note': randint (1, 5),
        'cuisine': compagnie_cuisine [randint(0, (len(company_cuisine)-1))]
    }
    #Etape 3: Insérer l'objet métier directement dans MongoDB via isnert_one
    résultat = db.reviews.insert_one (business)
    #Etape 4: Imprimer sur la console l'ObjectID du nouveau document
    print ('Créé {0} de 100 en tant que {1}'. format (x, result.inserted_id))
# Étape 5: Dites-nous que vous avez terminé
print ('terminé la création de 100 avis d'entreprise')

Assurez-vous de remplacer l'URL de connexion du client MongoDB par celle qui pointe vers votre instance de base de données MongoDB. Une fois que vous exécutez cette application, 500 entreprises nommées de manière aléatoire avec leurs évaluations correspondantes seront créées dans la base de données MongoDB appelée business . Toutes ces entreprises sont créées dans une collection unique appelée critiques . Notez que nous n'avons pas à créer explicitement une base de données avant de l'utiliser. Cela est différent des autres bases de données qui nécessitent des instructions comme CREATE DATABASE à exécuter en premier.

La commande qui insère des données dans MongoDB dans cet exemple est la fonction insert_one () . Un peu explicite, insert_one va insérer un document dans MongoDB. Le jeu de résultats renverra le seul ObjectID qui a été créé. C'est l'une des quelques méthodes qui insèrent des données. Si vous souhaitez insérer plusieurs documents dans un appel, vous pouvez utiliser la fonction insert_many .

En plus de la reconnaissance de l'insertion, le jeu de résultats pour insert_many inclura une liste des ObjectID qui ont été créés. Pour plus d'informations sur insert_many voir la documentation située ici .

Pour plus de détails sur l'ensemble de résultats de insert_many consultez cette section de la documentation .

Nous sommes maintenant prêts à explorer et gérer les données dans MongoDB en utilisant Python. Pour guider cette exploration, nous allons créer une autre application qui gérera nos revues d'entreprise

Explorer les données d'une revue d'activité

Maintenant que nous avons un bon ensemble de données dans notre base de données, demandons des résultats avec PyMongo. MongoDB la commande find_one est utilisée pour interroger un document unique, tout comme les instructions select sont utilisées dans les bases de données relationnelles. Pour utiliser la commande find_one dans PyMongo, nous transmettons un dictionnaire Python qui spécifie les critères de recherche. Par exemple, trouvons une seule entreprise avec une note de 5 en passant le dictionnaire, {'rating': 5} .

 fivestar = db.reviews.find_one ({'rating': 5 })
imprimer (fivestar)

Le résultat contiendra des données similaires au suivant:

 {u'rating ': 5,
 u'_id ': ObjectId (' 58e65383ea0b650c867ef195 '),
 u'name ': u'Fish Salty Corporation',
u'cuisine ': u'Sushi Bar'}

Étant donné que nous avons créé 500 échantillons de données, il doit y avoir plus d'une entreprise avec une note de 5. La méthode find_one est juste une d'une série d'instructions find qui prennent en charge les données MongoDB. Une autre instruction, appelée find renvoie un curseur sur tous les documents correspondant aux critères de recherche. Ces curseurs prennent également en charge des méthodes telles que count () qui renvoie le nombre de résultats dans la requête. Pour trouver le nombre total d'entreprises notées 5, nous pouvons utiliser la méthode count () comme suit:

 fivestarcount = db.reviews.find ({'rating': 5}). compter()
imprimer (fivestarcount)

Vos résultats peuvent varier, car les données ont été générées de manière aléatoire, mais lors d'un test, la valeur 103 a été renvoyée.

MongoDB peut facilement effectuer ces requêtes simples. Toutefois, considérez le scénario dans lequel vous voulez additionner l'occurrence de chaque évaluation sur l'ensemble du jeu de données. Dans MongoDB, vous pouvez créer 5 requêtes de recherche séparées, les exécuter et présenter les résultats, ou vous pouvez simplement lancer une seule requête en utilisant le pipeline d'agrégation MongoDB comme suit :

 from pymongo import MongoClient
# Connectez-vous à MongoDB, changez la chaîne de connexion par votre environnement MongoDB
client = MongoClient (port = 27017)
# Définir l'objet db pour qu'il pointe vers la base de données d'entreprise
db = client.business
# Afficher la méthode count () de find, compter le nombre total de 5
print ('Le nombre de critiques 5 étoiles:')
fivestarcount = db.reviews.find ({'évaluation': 5}). count ()
imprimer (fivestarcount)
# N'utilisons pas le cadre d'agrégation pour additionner l'occurrence de chaque évaluation dans l'ensemble de l'ensemble de données
print (' nLa somme de chaque note sur toutes les données regroupées par note')
stargroup = db.reviews.aggregate (
# Le pipeline d'agrégation est défini comme un tableau d'opérations différentes
[
# The first stage in this pipe is to group data
{ '$group':
    { '_id': "$rating",
     "count" : 
                 { '$sum' :1 }
    }
},
# The second stage in this pipe is to sort the data
{"$sort":  { "_id":1}
}
# Close the array with the ] tag
])
# Imprimer le résultat
pour groupe dans stargroup:
    imprimer (groupe)

Une plongée profonde dans le cadre d'agrégation est en dehors de la portée de cet article, cependant, si vous êtes intéressé à en apprendre plus à ce sujet consultez cette documentation .

Mise à jour des données avec PyMongo

Similaire à insert_one et insert_many il y a des fonctions pour vous aider à mettre à jour vos données MongoDB y compris update_one update_many et replace_one . La méthode update_one mettra à jour un document unique en fonction d'une requête qui correspond à un document. Supposons, par exemple, que notre application de revue d'entreprise a maintenant la capacité pour les utilisateurs d '«aimer» une entreprise. Pour illustrer la mise à jour d'un document avec ce nouveau champ «j'aime», voyons d'abord à quoi ressemble un document existant à partir de l'insertion de notre précédente application dans MongoDB. Ensuite, mettons à jour le document et actualisons le document et voyons le changement.

 de pymongo import MongoClient
#include pprint pour readabillity de la
à partir de pprint import pprint

#change la chaîne de connexion MongoClient vers votre instance de base de données MongoDB
client = MongoClient (port = 27020)
db = client.business

ASingleReview = db.reviews.find_one ({})
print ('Un exemple de document:')
pprint (ASingleReview)

resultat = db.reviews.update_one ({'_ id': ASingleReview.get ('_ id')}, {'$ inc': {'aime': 1}})
print ('Nombre de documents modifiés:' + str (result.modified_count))

UpdatedDocument = db.reviews.find_one ({'_ id': ASingleReview.get ('_ id')})
print ('Le document mis à jour:')
pprint (UpdatedDocument)

Lors de l'exécution de l'exemple de code ci-dessus, vous pouvez voir des résultats similaires aux suivants:

 Un exemple de document:
{'_id': ObjectId ('58eba417ea0b6523b0fded4f'),
 «cuisine»: «Pizza»,
 «nom»: «Kitchen Goat Corporation»,
 'note': 1}

Nombre de documents modifiés: 1

Le document mis à jour:
{'_id': ObjectId ('58eba417ea0b6523b0fded4f'),
 «cuisine»: «Pizza»,
 'aime': 1,
 «nom»: «Kitchen Goat Corporation»,
 'note': 1}

Notez que le document d'origine ne contenait pas le champ "j'aime" et qu'une mise à jour nous permettait d'ajouter facilement le champ au document. Cette possibilité d'ajouter dynamiquement des clés sans les tracasseries des instructions coûteuses Alter_Table est la puissance du modèle de données flexible de MongoDB. Il fait du développement rapide d'applications une réalité.

Si vous souhaitez mettre à jour tous les champs du document et conserver le même ObjectID, vous devez utiliser la fonction replace_one . Pour plus de détails sur replace_one consultez la documentation de PyMongo ici .

Les fonctions de mise à jour prennent également en charge une option appelée "upsert". Avec upsert vous pouvez dire à MongoDB de créer un nouveau document si le document que vous essayez de mettre à jour n'existe pas.

Supprimer des documents

Tout comme les autres commandes discutées jusqu'ici, delete_one et Les commandes delete_many prennent une requête qui correspond au document à supprimer en tant que premier paramètre. Par exemple, si vous souhaitez supprimer tous les documents de la collection reviews où la catégorie était "Bar Food", vous devez émettre ce qui suit:

 result = db.restaurants.delete_many ({"category": "Bar Food"} )

Si vous supprimez un grand nombre de documents, il peut être plus efficace de supprimer la collection au lieu de supprimer tous les documents.

Où aller? Suivant

Il existe de nombreuses options pour apprendre à propos de MongoDB et Python. MongoDB University est un excellent endroit pour commencer et apprendre sur l'administration, le développement et d'autres sujets tels que l'analyse avec MongoDB. Un cours en particulier est MongoDB pour les développeurs (Python). Ce cours couvre les sujets de cet article de manière beaucoup plus approfondie, y compris une discussion sur le cadre d'agrégation MongoDB. Check it out ici .

Annexe: Création d'une base de données MongoDB Atlas de niveau libre

MongoDB Atlas est un service de base de données hébergé qui vous permet de choisir la taille de votre base de données. Suivez les étapes ci-dessous pour commencer à utiliser votre base de données gratuite

Créez votre cluster gratuitement

Suivez les étapes ci-dessous pour créer une base de données MongoDB gratuite:

  1. Allez à MongoDB Atlas . Cliquez sur le bouton "Démarrer gratuitement"
  2. Remplissez le formulaire pour créer un compte. Vous utiliserez ces informations pour vous connecter et gérer votre MongoDB.

Une fois que vous aurez rempli le formulaire, le site Web créera votre compte et vous verrez apparaître le pop-up "Build Your New Cluster":

 Construisez votre nouveau cluster

Pour utiliser le niveau libre, faites défiler vers le bas et sélectionnez "M0". Lorsque vous faites cela, le panneau des régions sera désactivé. Le niveau libre a certaines restrictions, avec la possibilité de sélectionner une région comme l'un d'entre eux. La taille de votre base de données sera limitée à 512 Mo de stockage. Étant donné que, lorsque vous êtes prêt à utiliser MongoDB pour plus que quelques opérations simples, vous pouvez facilement créer une autre instance en choisissant une taille dans la liste "Taille de l'instance". Avant de cliquer sur "Confirm & Deploy", faites défiler la page et notez les options supplémentaires affichées ici:

 Options supplémentaires dans la boîte de dialogue Build New Cluster

vous pouvez voir qu'il existe d'autres options disponibles, notamment le choix d'un jeu de réplicas à 3, 5 ou 7 nœuds et jusqu'à un cluster de 12 serveurs. Notez que le niveau libre ne vous permet pas de choisir autre chose que le cluster à 3 nœuds, mais si vous passez à d'autres tailles, ces options deviendront disponibles.

À ce stade, nous sommes presque prêts – la dernière chose à faire est le admin nom d'utilisateur et mot de passe. Vous pouvez également choisir de générer un mot de passe aléatoire en cliquant sur le bouton «Générer un mot de passe sécurisé». Enfin, cliquez sur le bouton "Confirmer & Déployer" pour créer votre cluster Atlas.

Configuration de votre liste blanche IP

Pendant qu'Atlas crée votre base de données, vous devrez définir les IP autorisées à accéder à votre nouvelle base de données. Atlas n'autorise pas l'accès à Internet par défaut. Cette liste d'adresses IP accordées est appelée "IP Whitelist". Pour ajouter l'IP de votre machine à cette liste, cliquez sur l'onglet "Sécurité", puis sur "IP Whitelist", puis cliquez sur le bouton "+ ADD IP ADDRESS".

 Ajouter une entrée à la liste blanche

Vous pouvez cliquer sur le bouton "Ajouter une adresse IP actuelle" pour ajouter votre adresse IP ou fournir une adresse IP spécifique ou activer l'accès à le monde en ne limitant pas du tout les IP (pas une idée fantastique, mais là au cas où vous n'avez pas d'autre choix et devez autoriser l'authentification de n'importe quelle IP)

Une fois que vous avez rempli cette boîte de dialogue cliquez sur "Confirmer" mettez à jour les paramètres du pare-feu sur votre cluster MongoDB Atlas. Ensuite, cliquez sur l'onglet "Clusters" et vous devriez voir votre nouvelle base de données MongoDB prête à l'action!

 Cluster0 prêt pour l'action

Tester votre connexion

Nous voulons nous assurer que la base de données MongoDB est accessible de notre boîte de développement avant de commencer à taper du code. Un moyen rapide de tester consiste à établir une connexion à l'aide de l'outil de ligne de commande Mongo Shell. Assurez-vous d'avoir vos informations de connexion MongoDB disponibles. Si vous utilisez MongoDB Atlas, vous pouvez obtenir les informations de connexion en cliquant sur le bouton "Connecter" dans l'onglet Clusters, comme illustré ci-dessous.

 Bouton de connexion du cluster Atlas MongoDB

Le bouton Connecter lance une boîte de dialogue qui fournit des informations de connexion. Au bas de cette boîte de dialogue, vous verrez une ligne de commande prête à être copiée et collée dans une invite de commande.

 Se connecter avec la section Mongo Shell de la boîte de dialogue Connexion

Notez que si vous copiez le texte de connexion tel quel, vous devrez remplacer par le mot de passe de admin et avec le nom de la base de données à laquelle vous souhaitez vous connecter.

Le texte de commande provenant de cette boîte de dialogue est long. Pour plus de clarté, examinons chacun des paramètres individuellement.

 mongo
"mongodb: //cluster0-shard-00-00-2ldwo.mongodb.net: 27017, cluster0-shard-00-01-2ldwo.mongodb.net: 27017, cluster0-shard-00-02-2ldwo.mongodb.net : 27017 / test? ReplicaSet = Cluster0-shard-0 "
 --authenticationDatabase admin
--ssl
--username myadmin
--password S $ meComPLeX1!

Le premier paramètre est une chaîne contenant la liste de tous les nœuds de notre cluster, y compris la définition d'un jeu de réplicas appelé Cluster0-shard-0 . Le paramètre suivant, - authenticationDatabase nous indique quelle base de données contient l'utilisateur que nous voulons authentifier

- ssl force le cryptage de la connexion via le protocole SSL / TLS. Enfin, nous fournissons le nom d'utilisateur et le mot de passe, et nous sommes connectés! Notez que si vous n'utilisez pas MongoDB Atlas, il est possible que votre déploiement MongoDB ne soit pas activé pour la sécurité ou SSL. Ainsi, vous connecter à ce peut être aussi simple que de taper "mongo" dans l'invite de commande.

Vous êtes maintenant prêt à utiliser MongoDB!

Si vous êtes intéressé à apprendre tout ce que vous devez savoir pour obtenir a commencé à construire une application MongoDB, vous pouvez vous inscrire à l'un de nos cours en ligne MongoDB