Aggiornamento efficiente del database tramite SQLAlchemy ORM

|

Sto avviando una nuova applicazione e sto cercando di utilizzare un ORM, in particolare SQLAlchemy.

Diciamo che ho una colonna "foo" nel mio database e voglio incrementarla. In sqlite semplice, questo è facile:

db = sqlite3.connect("mydata.sqlitedb") cur = db.cursor() cur.execute("update table stuff set foo = foo + 1") 

Ho scoperto l'equivalente SQL-builder di SQLAlchemy:

engine = sqlalchemy.create_engine("sqlite:///mydata.sqlitedb" ) md = sqlalchemy.MetaData(motore) table = sqlalchemy.Table("stuff", md, autoload=True) upd = table.update(values={table.c.foo:table.c.foo+1}) motore .execute(upd) 

Questo è leggermente più lento, ma non contiene molto.

Ecco la mia migliore ipotesi per un approccio ORM SQLAlchemy:

# snip definizione della classe Stuff fatta usando declarative_base # snip creazione dell'oggetto sessione per c in session.query(Stuff): c.foo = c.foo + 1 sessione session.flush(). commit() 

Questo fa la cosa giusta, ma impiega poco meno di cinquanta volte il tempo degli altri due approcci. Presumo che sia perché deve portare tutti i dati in memoria prima di poter lavorare con esso.

C'è un modo per generare l'SQL efficiente usando l'ORM di SQLAlchemy? O usando qualsiasi altro ORM Python? O dovrei semplicemente tornare a scrivere l'SQL a mano?