dido05327 / fqsdfqsd

Programmation MySQL X DevAPI en Python
https://lab.github.com/CollegeBoreal/lab-programmation-mysql-x-devapi-en-python
1 stars 0 forks source link

Traverser la collection #3

Open github-learning-lab[bot] opened 3 years ago

github-learning-lab[bot] commented 3 years ago

Continuons maintenant dans la manipulation des documents stockés dans la collection retournée par la fonction lecture.

Pour naviguer dans la collection, on manipule des enregistrements data items et l'instruction les manipulant est fetch. fetch se décline en deux configurations:

  for doc in docs.fetch_all():
    for country in doc.countries:

Le code ci-dessus décrit une boucle for consommant tous fetch_all les documents docs, récupérés de la lecture. Du document doc extrait, on va lire le document countries. Un document json est délimité par des { et } et composé de key: value. Par exemple, le contenu du fichier b000000000.json :

{
  "countries": [
    {
      "GNP": 116729,
      "_id": "ZAF",
      "Name": "South Africa",
      "IndepYear": 1910,
      "geography": {
        "Region": "Southern Africa",
        "Continent": "Africa",
        "SurfaceArea": 1221037
      },
      "government": {
        "HeadOfState": "Thabo Mbeki",
        "GovernmentForm": "Republic"
      },
      "demographics": {
        "Population": 40377000,
        "LifeExpectancy": 51.099998474121094
      }
    },
    {
      "GNP": 3459,
      "_id": "HTI",
      "Name": "Haiti",
      "IndepYear": 1804,
      "geography": {
        "Region": "Caribbean",
        "Continent": "North America",
        "SurfaceArea": 27750
      },
      "government": {
        "HeadOfState": "Jean-Bertrand Aristide",
        "GovernmentForm": "Republic"
      },
      "demographics": {
        "Population": 8222000,
        "LifeExpectancy": 49.20000076293945
      }
    }
  ]
}

Pour récupérer les documents de la base de données, on utilise la fonction find de la collection. find ramène des ensembles de données data set dont on manipulera les data items avec fetch. Ce sont deux notions différentes marchant de pair.

On va tenter de créer une fonction former_des_chefs() qui prendra des documents d'une collection et extraira uniquement les chefs de gouvernements. On créera au passage une collection chefs_de_gouvernement que nous pourrons sauveguarder dans la base de données ultérieurement et au passage récupérer le résultat finale data set et le stocker dans une variable docs en mémoire et la retourner de la fonction.

def former_des_chefs(docs):

  # Crée une nouvelle collection 'chefs_de_gouvernement'
  nomColl = 'chefs_de_gouvernement'
  maColl = db.create_collection(nomColl)

  # Manipuler la collection et la rajouter à la nouvelle
  for doc in docs.fetch_all():
    for country in doc.countries:
      # Insert des documents JSON de type government
      maColl.add(country['government']).execute()

  # Trouver tous les documents JSON et les mettre en mémoire
  docs = maColl.find().execute()

  # Détruit la collection
  db.drop_collection(nomColl)

  return docs

remplace la fonction main par le code suivant:

def main():
  docs = lecture('b000000000.json')
  chefs = former_des_chefs(docs)
  print(len(chefs.fetch_all()))
  # Ne pas oublier de remercier le gestionnaire de BD
  session.close
dido05327 commented 3 years ago

cool

github-learning-lab[bot] commented 3 years ago

cool :x: :-1: :x:

Cette réponse n'a pas l'air de correspondre avec nos prédictions

Ne pas se décourager

:arrow_right: Entrer un autre commentaire

dido05327 commented 3 years ago

45

github-learning-lab[bot] commented 3 years ago

45 :x: :-1: :x:

Cette réponse n'a pas l'air de correspondre avec nos prédictions

Ne pas se décourager

:arrow_right: Entrer un autre commentaire