firebase 凡士通文档使用Python脚本动态创建

iovurdzv  于 2023-05-07  发布在  Python
关注(0)|答案(2)|浏览(149)

我有一个.csv文件。
例如:

record-1a, record-1b, record-1c, document-name-1
record-2a, record-2b, record-2c, document-name-2

我想解决的是,在运行我的python脚本后,它将创建2个文档(取决于.csv中的行数),名称为document-name-N
这是我现在的代码:

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
from array import array
import csv

cred = credentials.Certificate('firebase-sdk.json')

with open('foo/bar/file.csv', 'r', newline='', encoding="utf8") as file:
    reader = csv.reader(file)
    data = []
    for row in reader:
        data.append(row)

firebase_admin.initialize_app(cred)
db = firestore.client()

doc_ref = db.collection('collectionname').document(row[3])

for item in data:
    doc_ref.set({
        'someArray': [],
        'column1': item[0],
        'column2': item[1],
        'column3': item[2]
})

我已经看过这个文档了:https://firebase.google.com/docs/firestore/manage-data/transactions
但没能帮我找到解决办法

4c8rllxm

4c8rllxm1#

在第一个代码示例中,您在for循环中使用了doc_ref,所以我猜运行脚本后的结果是,只生成了一个包含JSON文件最后一行数据的文档。实际的行为是立即用该文件的每一行覆盖文档。在第二个示例中,您将为每一行创建一个新引用,因此它将为每一行生成不同的文档。

ldxq2e6h

ldxq2e6h2#

我找到了解决方案:

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
from array import array
import csv

cred = credentials.Certificate('firebase-sdk.json')

with open('foo/bar/file.csv', 'r', newline='', encoding="utf8") as file:
    reader = csv.reader(file)
    data = []

    firebase_admin.initialize_app(cred)
    db = firestore.client()

    for row in reader:
        print(row)
        data.append(row)

        content = ({
            'someArray': [],
            'column1': item[0],
            'column2': item[1],
            'column3': item[2]
        })
        db.collection('collectionname').document(row[5]).set(content)

我是一个小初学者与python,所以我几乎不知道是什么问题。如果有人能就这个问题写几行字,我会很高兴的。

相关问题