Lavoro molto con SQL Alchemy e, in quanto "programmatore pigro", mi piace la comodità che offre. Ma il "programmatore diligente" in me spesso si preoccupa dell'ottimizzazione e delle prestazioni delle query e più le prestazioni della mia applicazione rispetto a quelle query.
Un grave trappola che i programmatori affrontano quando si utilizza un ORM sta svolgendo lavoro nell'applicazione che dovrebbe essere eseguita sul lato del database.
Quindi eccomi qui, a chiedermi quando sacrificare le prestazioni per praticità. Ad esempio, nella mia applicazione potrei spesso dover fare qualcosa del genere:
Comodo
users = User.query.filter_by(some_column=True).all() # list of User objects (all columns)
refined_users = []
for user in users: # do something with a couple of columns
refined_users.append((user.name, user.age))
Ottimizzata
users = session.query(User.name, User.age).filter(User.some_column==True).all() # list of tuples
Quindi questo è un esempio piuttosto semplice e forzato in cui si opta per l'opzione ottimizzata. Ma nei casi in cui devo interrogare molte colonne , diventa noioso. Mi piace anche la comodità di accedere alle colonne come user.name
mentre l'esempio ottimizzato restituisce semplicemente i dati in un elenco di tuple (vale a dire senza nomi di colonne).
Quindi, mentre interrogare l'intero oggetto (cioè: ogni colonna) è conveniente e molto probabilmente non ha che ha un grosso impatto sul mio database, è comunque un po 'sporco sapendo che posso essere più bello al mio database.