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?
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)?
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 fairefor 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.