Pensez-y comme ayant fait ce qui suit: Les éléments à vérifier varient en fonction de l'état du contrat, c'est donc facile.
Le délimiteur est ",". Parfois, il y a des fichiers csv qui ne suivent pas les règles, alors soyez prudent à ce sujet.
Cette fois, c'est une configuration simple. Je considère unique comme clé primaire et il n'y a pas de duplication.
Configuration de la base de données
unique ---------- item1
| | a : 1
| | b : 2
| ∟ c : 3
|
|--------- item1
| | a : 4
| | b : 5
| ∟ c : 6
|
∟ --------- item1
| a : 7
| b : 8
∟ c : 9
Je fais ce qui suit.
--Lecture des données --firestore initialisation de la variable --Inscrivez-vous un par un dans le firestore
sample.py
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
import csv
#Lecture des données
def read_data(file_name):
csv_data = None
with open(file_name) as r:
reader =csv.reader(r)
csv_data = [row for row in reader]#Stocké dans une variable sous forme de tableau à deux dimensions
print('read end')
return csv_data
#processus d'initialisation de Firebase
def firebase_init(api_key):
api_key = credentials.Certificate(api_key)
#Il semble que l'état d'initialisation précédent reste, supprimez donc d'abord l'état d'initialisation précédent
if(len(firebase_admin._apps)):
firebase_admin.delete_app(firebase_admin.get_app())
firebase_admin.initialize_app(api_key)
print("init end")
#Traitement principal / enregistrement des données
def exe(data):
db = firestore.client()#variable client Firestore
header = data[0]#Obtenir l'en-tête
doc_base = db.collection(header[0])#Définir un lieu unique
print("proc start")
for i in range(1, len(data)):#Puisque les données proviennent de la deuxième ligne, de 1
doc_ref = doc_base.document(data[i][0])# a,b,Situé à c
buf = {}#tampon
for j in range(1, len(data[i])):
buf[header[j]] = data[i][j]
doc_ref.set(buf) #Enregistrer dans Firestore
print("poc end")
def main():
file_name = "nom de fichier csv"
api_key = r'api_key'
#Lire le fichier
data = read_data(file_name)
#initialisation Firebase
firebase_init(api_key)
#Traitement principal
exe(data)
if __name__=="__main__":
main()
Cette fois, il s'agit d'un enregistrement par lots dans un état propre, mais je pense qu'il est préférable d'acquérir collectivement les données du firestore en cours de route, de vérifier la différence et de mettre à jour le firestore. Puisque le nombre d'appels API est réduit, la charge n'est-elle pas réduite? Je n'ai pas fait de calcul d'essai.
Recommended Posts