Skip to content

Instantly share code, notes, and snippets.

@CoutinhoElias
Created April 4, 2021 12:59
Show Gist options
  • Save CoutinhoElias/3188692677a8eb91db74cee063fef396 to your computer and use it in GitHub Desktop.
Save CoutinhoElias/3188692677a8eb91db74cee063fef396 to your computer and use it in GitHub Desktop.
Convertendo lista em dicionário com python.
"""
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