Qual é a maneira mais eficiente de preencher atributos de classe com uma linha de uma consulta ao banco de dados?

StackOverflow https://stackoverflow.com/questions/2542887

  •  23-09-2019
  •  | 
  •  

Pergunta

Procurando que uma consulta ao banco de dados defina todas as variáveis ​​de instância em uma classe:

Exemplo:

def populate(self, if):
    #Perform mysql query

    self._name = row['name']
    self._email = row['email']
    ...

Qual é a maneira mais rápida de fazer isso?Ou isso não é recomendado (com uma abordagem melhor)?

Foi útil?

Solução

  • Isso torna seu código mais legível e previsível para ser feito manualmente assim.Dessa forma, você sabe exatamente quais atributos existem e quais atributos não existem com muita facilidade.

  • Você pode usar setattr para automatizar toneladas deles.

    Uma maneira bastante interessante seria definir uma lista attributes = ['name', 'email'...] como um atributo de classe, então faça

    for name in self.attributes:
        setattr(self, "_" + name, row[name])
    

    Você também pode obter os atributos da própria consulta, mas isso mudará dependendo da sua consulta (especialmente se você estiver usando SELECT * ou algo assim) e você está alterando seu banco de dados.

  • Percebo que todos esses atributos têm sublinhado inicial.Se isso for algo puramente interno, considere se um atributo, em vez do resultado da consulta em si ou o armazenamento de um ditado, não atenderia melhor às suas necessidades.Geralmente, os atributos devem ser coisas bastante estáticas.

  • Ouvi dizer que oursql é melhor que MySQLdb

Outras dicas

Olhe para sqlalchemy é a abstração de banco de dados mais popular para python.
Se você realmente gosta do padrão de registro ativo, há uma camada que você pode colocar em cima dele chamada elixir.

Eu uso sqlalchemy porque é uma boa abstração de banco de dados e me permite trocar de banco de dados.Eu uso sqlite na memória para meus testes e posso inseri-lo em meu código usando sqlalchemy.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top