Python 스크립트로 Firestore(Firebase) 미리 채우기

이것은 CSV 또는 JSON 데이터를 Firestore로 가져오는 방법을 보여주는 빠른 게시물입니다. 데이터가 CSV 형식인 경우 CSVJSON이라는 온라인 도구를 사용하여 데이터를 JSON 형식으로 변환해야 합니다. 이 가이드는 Python을 사용합니다. 이 게시물에서 JavaScript 버전을 확인할 수 있습니다. 이 가이드에서는 Firebase 프로젝트가 이미 설정되어 있다고 가정합니다.

데이터





먼저 가져올 데이터를 준비해야 합니다. 이 가이드에서는 Google 스프레드시트를 사용하여 데이터를 준비한 다음 csv 형식으로 내보냈습니다. 그런 다음 위에서 언급한 온라인 CSVJSON을 사용하여 데이터를 json 형식으로 내보냈습니다.
id 필드를 Firestore 문서 ID로 사용합니다. 또한 여러 컬렉션 가져오기를 허용하도록 코드와 파일을 구성합니다. 하나의 JSON 파일에는 하나의 컬렉션에 대한 데이터가 포함됩니다. JSON 파일의 이름은 컬렉션의 이름으로 사용됩니다. 예를 들어 categories.json 에서 가져오면 카테고리라는 컬렉션을 사용(또는 없는 경우 생성)하고 데이터를 가져옵니다. 모든 JSON 파일을 프로젝트 루트의 data/ 폴더에 배치합니다.

신임장



첫 번째 단계는 Firebase에서 서비스 키를 다운로드하는 것입니다. 사용자 및 권한 설정으로 이동하여 이를 수행하십시오. 아래 이미지 참조:



사용자 및 권한 페이지에서 서비스 계정 탭으로 이동합니다. 여기에서 서비스 계정 이메일과 코드에서 서비스 계정을 구성하는 방법을 보여주는 코드 스니펫을 볼 수 있습니다.





위 이미지에 표시된 새 비공개 키 생성 버튼을 클릭하여 서비스 키를 다운로드합니다. 이 파일을 프로젝트 폴더에 넣습니다.

암호



먼저 이전 단계에서 만든 자격 증명을 사용하여 Firebase SDK를 초기화하여 시작합니다.

import firebase_admin
from firebase_admin import credentials, firestore

cred = credentials.Certificate("path/to/serviceAccountKey.json")
firebase_admin.initialize_app(cred)

db= firestore.client()


다음으로 data/ 디렉토리의 모든 JSON 파일을 반복하고 각각을 가져옵니다. 파일 이름은 컬렉션 이름으로 사용됩니다(categories.json는 카테고리 컬렉션으로 가져옵니다).



12행은 JSON 파일만 사용하고 있는지 확인합니다.

13행은 파일 이름에서 컬렉션 이름을 가져옵니다.

15행은 JSON 데이터를 객체 목록으로 변환합니다.

각 개체(17행)에 대해 id 필드를 제거(팝)하고 문서 ID로 사용할 변수에 저장합니다(20행). 개체에 필드id가 없으면 Firestore에서 자동으로 ID를 생성하도록 합니다(22행).

아래는 전체 코드입니다.

import firebase_admin

import os

import json

from firebase_admin import credentials, firestore

cred = credentials.Certificate("path/to/serviceAccountKey.json")

firebase_admin.initialize_app(cred)

db = firestore.client()

for filename in os.listdir('data'):

    if filename.endswith('.json'):

        collectionName = filename.split('.')[0] # filename minus ext will be used as collection name

        f = open('data/' + filename, 'r')

        docs = json.loads(f.read())

        for doc in docs:

            id = doc.pop('id', None)

            if id:

                db.collection(collectionName).document(id).set(doc, merge=True)

            else:

                db.collection(collectionName).add(doc)



그게 다야! 모두 끝났습니다.

질문과 제안이 있으면 연락주세요.

즐거운 코딩하세요.

좋은 웹페이지 즐겨찾기