Was ist der effizienteste Weg, um bevölKlassenAttribute mit einer Zeile aus einer Datenbankabfrage?
Frage
eine Datenbankabfrage setzte alle die Instanzvariablen in einer Klasse zu haben, die Suche:
Beispiel:
def populate(self, if):
#Perform mysql query
self._name = row['name']
self._email = row['email']
...
Was ist der schnellste Weg, dies zu tun? Oder ist dies nicht empfohlen (mit einem besseren Ansatz)?
Lösung
-
Es macht Ihren Code der am lesbar und vorhersehbar wie es dies manuell zu tun. Auf diese Weise wissen Sie genau, welche Attribute existieren und welche Attribute nicht ziemlich leicht.
-
Sie können
setattr
verwenden Tonnen davon zu automatisieren.Eine recht schöne Art und Weise wäre eine Liste
attributes = ['name', 'email'...]
zu definieren, wie ein Klassenattribut dann zu tunfor name in self.attributes: setattr(self, "_" + name, row[name])
Sie können auch die Attribute aus der Abfrage erhalten selbst, aber das wird sich ändern, auf Ihre Anfrage abhängig (vor allem, wenn Sie
SELECT *
oder ähnliches verwenden) und Ihre Datenbank zu ändern. -
Ich stelle fest, diese Attribute alle Unterstrich haben führen. Wenn dies eine rein interne Sache ist, zu prüfen, ob ein Attribut eher als Ergebnis der Abfrage selbst oder ein dict Speicherung würde nicht besser Ihre Bedürfnisse. Im Allgemeinen sollen Attribute ziemlich statisch Dinge sein.
-
ich höre, ist oursql schönere das MySQLdb
Andere Tipps
Lesen Sie sqlalchemy es ist die populärste Datenbank-Abstraktions für Python.
Wenn Sie wirklich, wie die Active Record eine Schicht gibt es können Sie auf es setzen genannt Elixier .
Ich benutze sqlalchemy weil es eine schöne Datenbank Abstraktion ist und ermöglicht es mir, Datenbanken wechseln aus. Ich benutze SQLite im Speicher für meine Tests und ich kann es in meinen Code sqlalchemy verkeilen.