Огненное хранилище в python, заполняющее поля случайными данными

#python #firebase #google-cloud-firestore

#python #firebase #google-облако-firestore

Вопрос:

У меня есть вопрос о python и firestore, я подключил python к хранилищу огня, и я могу добавлять данные, однако, когда я пытаюсь заполнить поле в своей базе данных с помощью переменной, все, что я получаю в консоли firebase, — это случайная строка.


Мой код

 import urllib
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
link = "example.com/test1"
f = urllib.urlopen(link)
uw = f.read()
linky = "Example.com/test.txt"
fa = urllib.urlopen(linky)
uname = fa.read()
print(uname)
unname=uname
# Use a service account
uname="hello"
cred = credentials.Certificate('key.json')
firebase_admin.initialize_app(cred)
#uw="hello"
db = firestore.client()
doc_ref = db.collection(u'treasure').document(uw)
doc_ref.set({
    u'found_by': uname
    #u'last': u'Lovelace',
    #u'born': 1815
})
#print(uuname)
print(uname)
  

Вот моя консоль firebase
Извините, у меня нет необходимой репутации для встраивания изображения, но вот ссылка


примечание


Я пытаюсь загрузить данные для ввода в базу данных с сервера, однако я убедился, что это не проблема. первый из этих запросов url ib получает имя документа, однако это работает хорошо, но второй — это то, где я получаю данные поля, но проблема не в их загрузке с сервера
Спасибо!

Комментарии:

1. Не могли бы вы привести пример некоторых данных, которые вы вводите, и «случайных данных», которые получаются?

2. Привет @snakecharmerb Я добавлю изображение своей консоли

Ответ №1:

Данные кодируются в кодировке base64.

 >>> s = 'aGVsbG8='
>>> base64.b64decode(s)
b'hello'
  

Я не использую Firebase / Firestore, но если данные автоматически кодируются в base64 при записи, то, скорее всего, они будут автоматически декодироваться при чтении.

Если вам нужно вручную его декодировать, обратите внимание, что base64.b64decode возвращает bytes , поэтому вам нужно вызвать .decode() для байтов, чтобы получить str .

Этот комментарий на github предполагает, что добавление u префикса к строковым литералам заставит Firestore кодироваться как UTF-8 вместо base64.

Итак, в вашем примере:

 uname = u'Hello'