Created
April 4, 2021 12:59
-
-
Save CoutinhoElias/3188692677a8eb91db74cee063fef396 to your computer and use it in GitHub Desktop.
Convertendo lista em dicionário com python.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Olá gente, | |
O texto vai ficar parecido com o post anterior mas a dúvida é outra! | |
O que me leva a fazer este post é que estou muito empolgado aprendendo a usar Python com Firebase. | |
Estou conseguindo fazer todas as operações de banco de dados se eu trabalhar apenas com um registro (Faço CRUD sem problema nenhum) | |
Então surgiu a necessidade de fazer inserções em massa, eu poderia usar um create dentro de um for mas isso não é aconselhável segundo a documentação do Firebase. | |
**Eles aconselham enviar uma estrutura de JSON semelhante a essa abaixo:** | |
# Inserindo dados. | |
ref = db.reference('/') | |
ref.set({ | |
'Employee': { | |
'Cliente 1': { | |
'name': 'Elias Coutinho', | |
'age': 47, | |
'email': '[email protected]', | |
}, | |
'Cliente 2': { | |
'name': 'Maria Dila', | |
'age': 45, | |
'email': '[email protected]', | |
}, | |
} | |
}) | |
**Esse abaixo é o modelo que criei com pyton:** | |
{ | |
"Produtos": [ | |
{ | |
"cdchamada": "000003", | |
"nmproduto": "ESMALTE HIDRALAR 4X36 PLATINA HIDRACOR", | |
"stativo": "S" | |
}, | |
{ | |
"cdchamada": "000005", | |
"nmproduto": "HPISO 4X36 AZUL HIDRACOR", | |
"stativo": "N" | |
}, | |
{ | |
"cdchamada": "000012", | |
"nmproduto": "CALHA DE ZINCO 25", | |
"stativo": "S" | |
} | |
] | |
} | |
**MINHA NECESSIDADE:** | |
Note a diferença bem sutil, **no meu exemplo eu adicionei uma lista de dicionários** e para o Firebase isso é um array, então ele armazena como array. | |
Preciso transformar esses colchetes **[** em chaves **{** . | |
Já procurei várias soluções e não achei uma adequada. | |
Vou informar aqui a minha função comentada para que alguém possa me ajudar: | |
""" | |
#Função para inserir dados em lote no Firebase: | |
def exporta_produtos_json(self): | |
'''Credenciais do Firebase''' | |
cred = credentials.Certificate('firebase-sdk.json') | |
default_app = firebase_admin.initialize_app(cred, { | |
'databaseURL': 'https://-url_da_base_de_dados_firebase-rtdb.firebaseio.com/' | |
}) | |
'''Queryset que seleciona os dados da base local, serão usados para montar o objeto JSON''' | |
q = Produto.select(Produto.cdchamada, | |
Produto.nmproduto, | |
Produto.stativo).where(Produto.cdchamada.in_(['000003', '000005','000012'])) | |
''' Lista utilizada para armazenar os dicionários ''' | |
produto = [] | |
# Adicionando os dicts do peewee em uma tabela do Firebase. | |
for row in q.dicts(): | |
produto.append(row) | |
print(row) | |
''' Obs.: Quando eu percorro q.dicts() acima e mando imprimir row, obtenho o seguinte resultado: | |
{'cdchamada': '000003', 'nmproduto': 'ESMALTE HIDRALAR 4X36 PLATINA HIDRACOR', 'stativo': 'S'} | |
{'cdchamada': '000005', 'nmproduto': 'HPISO 4X36 AZUL HIDRACOR', 'stativo': 'N'} | |
{'cdchamada': '000012', 'nmproduto': 'CALHA DE ZINCO 25', 'stativo': 'S'} | |
''' | |
#Neste ponto o valor produto é uma lista, para resolver meu problema preciso | |
#transformar essa lista em um dicionário ou simplesmante imprimir a lista sem os colchetes. | |
produtos = {"Produtos": produto} | |
''' Enviando o dicionário ao Firebase ''' | |
ref = db.reference('/') | |
''' Abaixo é a forma correta que o Firebase aceita o JSON ''' | |
ref.set(produto) | |
print('***** JSON EXPORTADO *****') | |
""" | |
Como poderei fazer isso? | |
""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment