2017-01-21 2 views
1

Я пытаюсь выяснить, как использовать данные, которые пользователь вводит в качестве входных данных для получения информации из базы данных TinyDB.Извлечение данных в интерактивном режиме от TinyDB

My DB выглядит примерно так:

{"_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"]}}} 

В основном, DB является результатом двух словарей со списками, как это:

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

Моя идея заключается в следующем:

  1. Чтобы запросить модель коммутатора (q = вход («Скажите мне модель »)).
  2. Возьмите вход (q) от пользователя и проверьте, соответствует ли оно любому из «имен» в базе данных.
  3. Если это так, то распечатайте список fex_comp, весь список. В противном случае напечатайте другое сообщение.

Я понимаю, как формировать утверждения if, else, а также как использовать для циклов, но мне не удалось выяснить, как это сделать, как описано выше.

Любая помощь очень ценится!

Edvard

ответ

0

Как так?

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

Привет, спасибо, что ответили. На самом деле это не работает для меня. Мне кажется, что ваш сценарий фактически не извлекает данные из TinyDB, так как TinyDB использует методы search.db для получения данных. У меня также создается впечатление, что вы должны объявить переменную = Query() где-нибудь, чтобы она работала, хотя я могу ошибаться в этом. Не могли бы вы показать, как я мог бы реализовать ваше предложение, включая приглашение ввода и выборку данных из базы данных TinyDB? –

+0

Я вижу, это было недоразумение. Можете ли вы предоставить код, который создал базу данных? – hvwaldow

+0

Конечно, это дважды, для двух моделей-переключателей: # db.insert ({'switch': 'n9k-c9372px', 'names': ['nexus 9372px', 'nexus 9372-px', 'nexus9372px', 'n9372px '],' fex_comp ': [' 2224tp ',' 2232pp ',' 2232tm ',' 2232tm-e '}) –

Смежные вопросы