我有一个大约3 GB的巨大JSON文件,其中包含多个JSON记录(每行每条记录),如下所示:
{"deviceId":"52b336d46d01bde9","dow":"Thursday","downloadFlag":"N"}
{"deviceId":"8B0FCD5F-B62A-5351-0000-000000000000","dow":"Thursday"}
{"deviceId":"969D8075-9C9B-DE14-0000-000000000000","dow":"jeudi","downloadFlag":"Y"}
我必须在Firebase Realtime DB中编写这些JSON记录,我正在尝试使用以下提到的代码通过Python实现它:
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
import json
cred = credentials.Certificate('./test.json')
app = firebase_admin.initialize_app(cred, {'databaseURL' : 'https://test.firebaseio.com/'})
user_activities_sample = db.reference("userActivities")
new_post_ref = user_activities_sample.push()
f = open("test_save.json", "r")
for line in f.readlines():
data = json.loads(line)
print data
new_post_ref.set(data)
问题是,只有JSON文件中的最后一条记录才被写入数据库。 我的代码中有什么不正确的地方吗?或者我对push的理解是错误的?
非常感谢您的帮助。
答案 0 :(得分:3)
您的代码实际上是在做什么,每次使用set()
方法时,它都会覆盖这些值。
因为new_post_ref = user_activities_sample.push()
这行代码在变量Database Reference
中存储了一个new_post_ref
(除非更改,否则它将保持不变),并且每次set()
ref
而无需更改。这就是firebase
覆盖数据库中键new_post_ref
上的值的原因,因此,这将仅保存最后set()
个值。
因此,要纠正此行为,您每次在数据库中push()
一个新值时都必须set()
,例如:
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
import json
cred = credentials.Certificate('./test.json')
app = firebase_admin.initialize_app(cred, {'databaseURL' : 'https://test.firebaseio.com/'})
user_activities_sample = db.reference("userActivities")
f = open("test_save.json", "r")
for line in f.readlines():
data = json.loads(line)
print data
user_activities_sample.push().set(data) # now there will be new ref everytime you add new value to database
这样,您的问题将被根除。