我是python和firebase的新手,我正试图展开我的firebase数据库。
我有这种格式的数据库
每只猫都有数以千计的数据。我想要的只是获取猫的名字并将它们放在一个数组中。例如,我希望输出为['cat1','cat2'....]
我正在使用本教程 http://ozgur.github.io/python-firebase/
from firebase import firebase
firebase = firebase.FirebaseApplication('https://your_storage.firebaseio.com', None)
result = firebase.get('/Data', None)
上述代码的问题是它将尝试获取Data下的所有数据。我怎么才能取“猫”?
答案 0 :(得分:0)
Firebase实时数据库为one big JSON tree:
当您在数据库中的某个位置获取数据时,也会检索 它的所有子节点。
最佳做法是denormalize your data,为同一数据创建多个位置(节点):
很多时候,您可以使用查询来检索数据,从而对数据进行非规范化 数据子集
在您的情况下,您可以创建名为" categories"的第二个节点。你在哪里列出"只有"类别名称。
/cat1
/...
/cat2
/...
/cat3
/...
/cat4
/...
/categories
/cat1
/cat2
/cat3
/cat4
在这种情况下,您可以使用update() method同时写入多个位置。
答案 1 :(得分:0)
我正在浏览pyrebase文档。因此,我们可能只从某个路径中提取密钥。
要仅返回特定路径上的键,请使用shallow()方法。
all_user_ids = db.child("users").shallow().get()
在你的情况下,它会是这样的:
firebase = pyrebase.initialize_app(config)
db = firebase.database()
allCats = db.child("data").shallow().get()
如果它没有用,请告诉我。
答案 2 :(得分:0)
如果您想将猫内的值作为列,请尝试使用pyrebase,pip install pyrebase
/ cmd
上使用anaconda prompt
(如果您没有,则优先使用import pyrebase
config {"apiKey": yourapikey
"authDomain": yourapidomain
"databaseURL": yourdatabaseurl,
"storageBucket": yourstoragebucket,
"serviceAccount": yourserviceaccount
}
在您的环境路径上设置PIP或Python。安装后:
def connect_firebase():
# add a way to encrypt those, I'm a starter myself and don't know how
username: "usernameyoucreatedatfirebase"
password: "passwordforaboveuser"
firebase = pyrebase.initialize_app(config)
auth = firebase.auth()
#authenticate a user > descobrir como não deixar hardcoded
user = auth.sign_in_with_email_and_password(username, password)
#user['idToken']
# At pyrebase's git the author said the token expires every 1 hour, so it's needed to refresh it
user = auth.refresh(user['refreshToken'])
#set database
db = firebase.database()
return db
注意:您可以在Firebase的控制台上找到上述所有信息: https://console.firebase.google.com/project/>>>您的项目>>>点击图标“<'/>”使用“将firebase添加到您的网络应用程序”标签
回到代码......
制作一个简洁的定义,以便将其存储到py文件中:
.py
好的,现在将其保存为一个整洁的auth.py
文件
NEXT,在您的新笔记本或主.py上,您将从现在开始导入这个我们称之为 from auth import *
# add do a variable
db = connect_firebase()
#and now the hard/ easy part that took me a while to figure out:
# notice the value inside the .child, it should be the parent name with all the cats keys
values = db.child('cats').get()
# adding all to a dataframe you'll need to use the .val()
data = pd.DataFrame(values.val())
的新.py文件...
print(data.head())
就是这样, Name Value Date Time
0 FAN_RFB 1 2018-04-07 02:34:43
1 KW_TOTAL 186 2018-04-08 23:59:58
2 ME_POW_1 8618 2018-04-08 23:59:56
3 ME_POW_2 8315 2018-04-08 23:59:56
4 FAN_RFB 1 2018-04-07 02:34:43
5 KW_TOTAL 185 2018-04-09 00:00:07
6 ME_POW_1 8467 2018-04-09 00:00:09
7 ME_POW_2 8350 2018-04-09 00:00:09
8 FAN_RFB 1 2018-04-07 02:34:43
9 KW_TOTAL 182 2018-04-09 00:00:15
10 ME_POW_1 8783 2018-04-09 00:00:16
11 ME_POW_2 8422 2018-04-09 00:00:16
12 FAN_RFB 1 2018-04-07 02:34:43
13 KW_TOTAL 184 2018-04-09 00:00:26
14 ME_POW_1 8545 2018-04-09 00:00:28
15 ME_POW_2 8370 2018-04-09 00:00:28
检查值/列是否是预期的位置。