Python 如何为嵌套集合或子集合导入和导出firestore数据库?
这就是我尝试过的。但它将子集合的所有文档复制到单个子集合。 请帮助我修改此代码,以便将其用于子集合。还有一个问题是每次我需要更改每个子集合的代码时。 例如:如果数据库的结构类似于coll1->doc->multiplecollections->doc 代码:Python 如何为嵌套集合或子集合导入和导出firestore数据库?,python,database,firebase,google-cloud-firestore,script,Python,Database,Firebase,Google Cloud Firestore,Script,这就是我尝试过的。但它将子集合的所有文档复制到单个子集合。 请帮助我修改此代码,以便将其用于子集合。还有一个问题是每次我需要更改每个子集合的代码时。 例如:如果数据库的结构类似于coll1->doc->multiplecollections->doc 代码: import firebase_admin from firebase_admin import credentials, firestore read_objects = [] docid = [] export_db = None
import firebase_admin
from firebase_admin import credentials, firestore
read_objects = []
docid = []
export_db = None
import_db = None
count = 0
export_collection_name = "Resources"
import_collection_name = "Resources"
def batch_data(iterable, n=1):
l = len(iterable)
for ndx in range(0, l, n):
yield iterable[ndx:min(ndx + n, l)]
def init_export_db():
global export_db
cred = credentials.Certificate("./path to.json")
source_app = firebase_admin.initialize_app(cred, name="source")
export_db = firestore.client(app=source_app)
def init_import_db():
global import_db
cred = credentials.Certificate("./path to.json")
destination_app = firebase_admin.initialize_app(cred, name="destination")
import_db = firestore.client(app=destination_app)
def read_data_from_firestore():
global read_objects, export_db, export_collection_name, count
docs = export_db.collection(export_collection_name).stream()
read_objects = []
# for doc in docs:
# print(u'{} => {}'.format(doc.id, doc.to_dict()))
# obj = doc.to_dict()
# read_objects.append(obj)
# count += 1
# docid.append(doc.id)
# return docid
collections = export_db.collection(export_collection_name).document('85lffhHV2vL2VYg00zsc').collections()
for collection in collections:
for doc in collection.stream():
print(f'{doc.id} => {doc.to_dict()}')
obj = doc.to_dict()
read_objects.append(obj)
count += 1
docid.append(doc.id)
if doc.id == 'zlU6i5tTsEd65Eo6VD0w':
break
break
print(docid)
def write_to_firestore():
global read_objects, import_db, import_collection_name
print("uploading to " + import_collection_name)
# print(read_objects)
for batched_data in batch_data(read_objects, 10):
batch = import_db.batch()
for data_item in batched_data:
print(data_item)
# for doc in docid:
doc_ref = import_db.collection(import_collection_name).document('85lffhHV2vL2VYg00zsc').collection('audio').document()
# print(doc_ref)
batch.set(doc_ref, data_item)
batch.commit()
print("import DB updated")
# import_db.collection('Resources').document('85lffhHV2vL2VYg00zsc').collection('audio').document()
if __name__ == '__main__':
count = 0
init_export_db()
read_data_from_firestore()
init_import_db()
write_to_firestore()
print("Total " + str(count) + " uploaded")