Qual è il modo più efficace per popolare gli attributi di classe con una riga da una query di database?
Domanda
cercando di avere una query di database impostato tutte le variabili di istanza di una classe:
Esempio:
def populate(self, if):
#Perform mysql query
self._name = row['name']
self._email = row['email']
...
Qual è il modo più veloce per fare questo? O è questo non è raccomandato (con un approccio migliore)?
Soluzione
-
Si rende il codice il più leggibile e prevedibile per farlo manualmente in questo modo. In questo modo si sa esattamente cosa gli attributi esistono e quali attributi non abbastanza facilmente.
-
È possibile utilizzare
setattr
per automatizzare tonnellate di questi.Un modo abbastanza bello sarebbe quello di definire una lista
attributes = ['name', 'email'...]
come un attributo di classe poi farefor name in self.attributes: setattr(self, "_" + name, row[name])
È inoltre possibile ottenere gli attributi della query stessa, ma questo cambierà a seconda della query (soprattutto se si sta utilizzando
SELECT *
o qualcosa di simile) e il vostro cambiare il vostro database. -
Ho notato questi attributi sono tutte dotate di sottolineatura iniziale. Se questa è una cosa puramente interna, considerare se un attributo piuttosto che il risultato della query stessa o la memorizzazione di un __dict__ non sarebbe meglio soddisfare le vostre esigenze. In generale, gli attributi dovrebbero essere cose abbastanza statici.
-
Ho sentito oursql è più bello il MySQLdb
Altri suggerimenti
sqlalchemy è l'astrazione del database più popolare per Python.
Se davvero, come il modello di record attivo v'è uno strato si può mettere su di esso chiamato elisir .
Io lo uso sqlalchemy perché è una bella astrazione del database e mi permette di passare fuori i database. Io uso SQLite nella memoria per i miei test e posso cuneo che al mio codice utilizzando SQLAlchemy.