Надеюсь, вам будут заданы довольно простые вопросы. Когда я получаю элемент с методом 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'}
Это потому что
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'}