Quelle est la manière la plus efficace pour remplir les attributs de classe avec une ligne d'une requête de base de données?

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

  •  23-09-2019
  •  | 
  •  

Question

Vous cherchez à avoir une requête de base de données définie toutes les variables d'instance dans une classe:

Exemple:

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

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

Quel est le meilleur moyen de le faire? Ou est-ce pas recommandé (avec une meilleure approche)?

Était-ce utile?

La solution

  • Il rend votre code plus lisible et prévisible pour le faire manuellement comme celui-ci. De cette façon, vous savez exactement quels attributs existent et quels sont les attributs ne pas assez facilement.

  • Vous pouvez utiliser setattr pour automatiser des tonnes de ces derniers.

    Une façon assez agréable serait de définir une liste attributes = ['name', 'email'...] comme un attribut de classe puis faire

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

    Vous pouvez également obtenir les attributs de la requête elle-même, mais cela va changer en fonction de votre requête (surtout si vous utilisez SELECT * ou quelque chose comme ça) et votre changement de votre base de données.

  • Je remarque que ces attributs ont tous underscore. Si cela est une chose purement interne, examiner si un attribut plutôt que le résultat de la requête elle-même ou le stockage d'un dict ne serait pas mieux répondre à vos besoins. En général, les attributs sont censés être des choses assez statiques.

  • J'entends oursql est plus agréable le MySQLdb

Autres conseils

Regardez sqlalchemy il est l'abstraction de base de données le plus populaire pour python.
Si vous aimez vraiment le modèle d'enregistrement actif il y a une couche que vous pouvez mettre sur le dessus de celui-ci appelle élixir .

J'utilise sqlalchemy parce que c'est une abstraction de base de données gentil et me permet de passer des bases de données. J'utilise SQLite en mémoire pour mes tests et je peux caler dans mon code à l'aide sqlalchemy.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top