Qual è il modo più efficace per popolare gli attributi di classe con una riga da una query di database?

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

  •  23-09-2019
  •  | 
  •  

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

È stato utile?

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 fare

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top