2017-01-21 2 views
1

J'essaie de comprendre comment utiliser les données qu'un utilisateur entre en entrée pour obtenir des informations d'une base de données TinyDB.Récupérer des données de manière interactive à partir de TinyDB

Mon DB ressemble à ceci:

{"_default": {"1": {"switch": "n9k-c9372px", "names": ["nexus 9372px", "nexus 9372-px", "nexus9372px", "n9372px", "n9k-c9372px"], "fex_comp": ["2224tp", "2232pp"]}, "2": {"switch": "n9k-c9396px", "names": ["nexus 9396px", "nexus 9396-px", "nexus9396px", "n9396px", "n9k-c9396px"], "fex_comp": ["2232tm-e", "2248tp"]}}} 

Fondamentalement, la DB est le résultat de deux dictionnaires avec des listes, comme celles-ci:

{"switch": "switch1", "names": ["name1", "name2", "name3"], "fex_comp":["fex1", "fex2", "fex3"] 

Mon idée est la suivante:

  1. Pour avoir une invite demandant un modèle de commutateur (q = entrée ("Dites-moi le modèle ")).
  2. Prenez l'entrée (q) de l'utilisateur et vérifiez si elle correspond à l'un des "noms" dans la base de données.
  3. Si c'est le cas, imprimez la liste fex_comp, la liste entière. Sinon, imprimez un message différent.

Je comprends comment former les instructions if, else, et aussi comment utiliser pour les boucles, mais je n'ai pas réussi à comprendre comment faire ce que je décris ci-dessus.

Toute aide est très appréciée!

Edvard

Répondre

0

Comme si alors?

from tinydb import TinyDB, Query 

    ql = ['nexus9372px','nexus9396px', 'not_there'] 

    def mkdb(): 
     db = TinyDB('db.json') 
     db.purge() 
     db.insert({'switch': 'n9k-c9372px', 
        'names': ['nexus 9372px', 
          'nexus 9372-px', 
          'nexus9372px', 'n9372px'], 
        'fex_comp': ['2224tp', '2232pp', 
           '2232tm', '2232tm-e']}) 
     db.insert({"switch": "n9k-c9396px", 
        "names": ["nexus 9396px", "nexus 9396-px", 
          "nexus9396px", "n9396px", 
          "n9k-c9396px"], 
        "fex_comp": ["2232tm-e", "2248tp"]}) 
     return(db) 

    def get_name(): 
     return(input('Name? ')) 

    def search(name, db): 
     Name = Query() 
     res = db.search(Name.names.any(name)) 
     if res: 
      #print(res) 
      print('fex_comp for {}: {}'.format(name, res[0]['fex_comp'])) 
     else: 
      print('{} not found'.format(name)) 

    db = mkdb() 
    name = get_name() 
    search(name, db) 
+0

Salut, merci de répondre. En fait, ça ne marche pas pour moi. Il me semble que votre script ne récupère pas réellement les données de TinyDB, puisque TinyDB utilise des méthodes search.db pour obtenir des données. Je suis également sous l'impression que vous devez déclarer variable = Query() quelque part pour que cela fonctionne, même si je peux me tromper à ce sujet. Pourriez-vous s'il vous plaît montrer comment je pourrais mettre en œuvre votre suggestion, y compris une invite de saisie et la récupération de données à partir d'une base de données TinyDB? –

+0

Je vois, c'était un malentendu. Pouvez-vous fournir le code qui a créé la base de données? – hvwaldow

+0

Bien sûr, deux fois, pour 2 modèles de commutateurs: # db.insert ({'switch': 'n9k-c9372px', 'noms': ['nexus 9372px', 'nexus 9372-px', 'nexus9372px', 'n9372px '],' fex_comp ': [' 2224tp ',' 2232pp ',' 2232tm ',' 2232tm-e '}) –