Как получить данные, которые имеют определенный дочерний ключ, используя Pyrebase
Я использую Pyrebase для доступа к моей базе данных Firebase. Моя база данных в настоящее время структурирована так:
- users
- 12345
name: "Kevin"
company: "Nike"
куда 12345
это идентификатор пользователя, а компания - это компания, к которой принадлежит пользователь. В настоящее время я пытаюсь получить всех пользователей, которые принадлежат Nike. Согласно документации Pyrebase, делать что-то вроде этого должно работать:
db.child("users").order_by_child("company").equal_to("Nike").get().val()
но я получаю ошибку "error" : "orderBy must be a valid JSON encoded path"
, Кто-нибудь знает, почему это может иметь место?
2 ответа
Что-то не так с библиотекой Pyrebase. Вот ссылка на проблему.
Решение состоит в том, чтобы добавить эти строки кода в ваше приложение.
# Temporarily replace quote function
def noquote(s):
return s
pyrebase.pyrebase.quote = noquote
Мне удалось решить эту проблему, так как я также использую rest API для подключения к моей базе данных Firebase в реальном времени. Я покажу, где ошибка, на примерах:
Когда я не оборачиваю значение (дочерний элемент, ключ и т. д.) и другие параметры запросов запятыми, модификация (которую я использую) дает мне ошибку/неверный запрос.
Вот URL-адрес ошибки/неверного запроса:
https://yourfirebaseprojecturl.com/Users.json?orderBy=username&startAt=lifeofkevin
Смотрите, как значение, так и значение, в данном случае,
username
а также
lifeofkevin
, не обрамляются запятыми, вот так
"username"
а также
"lifeofkevin"
, поэтому он должен возвращать правильный путь в кодировке JSON.
Чтобы работать, мне нужно обернуть мой и другие параметры запроса запятыми, чтобы Firebase возвращал данные, с которыми вы хотите работать.
Вот второй пример, правильный:
https://yourfirebaseprojecturl.com/Users.json?orderBy="username"&startAt="gang"
Теперь заметили, разница? Оба значения
orderBy
а также
startAt
заключены в запятые, так что теперь они будут возвращать данные, с которыми вы хотите работать.