Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用推入式Firebase实时数据库写入多个JSON记录_Python_Firebase_Firebase Realtime Database - Fatal编程技术网

Python 无法使用推入式Firebase实时数据库写入多个JSON记录

Python 无法使用推入式Firebase实时数据库写入多个JSON记录,python,firebase,firebase-realtime-database,Python,Firebase,Firebase Realtime Database,我有一个大约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","

我有一个大约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文件中的最后一条记录被写入数据库。 我的代码中是否有任何错误,或者我对推送的理解是否有误


非常感谢您的帮助。

您的代码实际上在做什么,每次使用
set()
方法时都会覆盖这些值

因为
new\u post\u ref=user\u activities\u sample.push()
此行将
数据库引用
存储在变量
new\u post\u ref
中(除非进行更改,否则将保持不变),并且每次都在
ref
上执行
。这就是为什么
firebase
会覆盖数据库中键
new\u post\u ref
处的值,因此,这将只保存最后一个
set()
ed值

因此,要纠正这种行为,每次在数据库中设置一个新值时,必须
push()
,如下所示:

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
这样,你的问题就会被根除