¿Cuál es la forma más eficiente de los atributos de clase pueblan con una fila de una consulta de base de datos?

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

  •  23-09-2019
  •  | 
  •  

Pregunta

Mirando para tener una base de datos de consulta establecido todas las variables de instancia de una clase:

Ejemplo:

def populate(self, if):
    #Perform mysql query

    self._name = row['name']
    self._email = row['email']
    ...

¿Cuál es la manera más rápida de hacer esto? O esto no es recomendable (con un enfoque mejor)?

¿Fue útil?

Solución

  • Hace que el código de la más legible y previsible que hacerlo manualmente como este. Así, usted sabe exactamente qué atributos existen y qué atributos no con bastante facilidad.

  • Se puede utilizar para automatizar setattr toneladas de estos.

    Una forma bastante agradable sería definir un attributes = ['name', 'email'...] lista como un atributo de clase a continuación, hacer

    for name in self.attributes:
        setattr(self, "_" + name, row[name])
    

    También puede obtener los atributos de la consulta en sí misma, pero esto cambiará en función de la consulta (especialmente si está usando SELECT * o algo por el estilo) y el cambio de su base de datos.

  • Me he dado cuenta estos atributos todos han subrayado inicial. Si esto es una cosa puramente interna, considerar si un atributo en lugar del resultado de la consulta en sí o almacenar un diccionario no mejor se adapte a sus necesidades. En general, los atributos se supone que son cosas bastante estáticos.

  • escucho oursql es más agradable la MySQLdb

Otros consejos

sqlalchemy es la abstracción de bases de datos más populares para Python.
Si realmente te gusta el patrón de registro activo hay una capa se puede poner en la parte superior de la misma llamada elixir .

Yo uso sqlalchemy porque es una abstracción de bases agradable y me permite cambiar hacia fuera las bases de datos. Yo uso SQLite en la memoria de mis pruebas y puedo calzar en mi código utilizando sqlalchemy.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top