Was ist der effizienteste Weg, um bevölKlassenAttribute mit einer Zeile aus einer Datenbankabfrage?

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

  •  23-09-2019
  •  | 
  •  

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

War es hilfreich?

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 tun

    for 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top