Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 如何为嵌套集合或子集合导入和导出firestore数据库?_Python_Database_Firebase_Google Cloud Firestore_Script - Fatal编程技术网

Python 如何为嵌套集合或子集合导入和导出firestore数据库?

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

这就是我尝试过的。但它将子集合的所有文档复制到单个子集合。 请帮助我修改此代码,以便将其用于子集合。还有一个问题是每次我需要更改每个子集合的代码时。 例如:如果数据库的结构类似于coll1->doc->multiplecollections->doc 代码:

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")