Как получить один предмет в пиребазе?

1

Надеюсь, вам будут заданы довольно простые вопросы. Когда я получаю элемент с методом Pyrebase.get(), например:

for company_id in game[company_type]:
    pyre_company = db.child("companies/data").order_by_child("id").equal_to(company_id).limit_to_first(
        1).get()
    company = pyre_company.val()
    print(company)
    break # Run only once for testing purposes

Я получаю следующий вывод, хотя я использую .val()

OrderedDict([('-LEw2zHYiJ6p15iBhKuZ', {'id': 427, 'name': 'Bugbear Entertainment', 'type': 'developer'})])

Но я хочу только объект JSON

{'id': 427, 'name': 'Bugbear Entertainment', 'type': 'developer'}
Теги:
firebase
firebase-realtime-database

1 ответ

0
Лучший ответ

Это потому что

db.child("companies/data").order_by_child("id").equal_to(company_id).limit_to_first(1).get()

это запрос, потому что вы вызываете метод orderByChild() в Reference (а также метод equalTo()).

Как поясняется здесь в документе JavaScript SDK:

Даже если для запроса имеется только одно совпадение, моментальный снимок по-прежнему является списком; он просто содержит один элемент. Чтобы получить доступ к элементу, вам необходимо выполнить цикл по результату:

ref.once('value', function(snapshot) {  
  snapshot.forEach(function(childSnapshot) {
    var childKey = childSnapshot.key;
    var childData = childSnapshot.val();
    // ...   
   }); 
});

С pyrebase вы должны использовать метод each(), как описано здесь, который "Возвращает список объектов, на каждом из которых вы можете вызвать val() и key() ".

pyre_company = db.child("companies/data").order_by_child("id").equal_to(company_id).limit_to_first(1).get()
for company in pyre_company.each(): 
    print(company.val()) // {'id': 427, 'name': 'Bugbear Entertainment', 'type': 'developer'}
  • 0
    Чем вам очень понравилось Ты босс!
  • 0
    Я получаю следующее сообщение об ошибке HTTPError (e, request_object.text) request.exceptions.HTTPError: [Ошибка клиента Errno 400: Неверный запрос URL: firebaseid.firebaseio.com/… {"error": "orderBy должен быть действительным JSON закодированный путь "}
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню