Saya memulai aplikasi baru dan melihat menggunakan ORM - khususnya, SQLAlchemy.
Katakanlah saya punya kolom 'foo' di database saya dan saya ingin menambahnya. Di sqlite lurus, ini mudah:
db = sqlite3.connect('mydata.sqlitedb')
cur = db.cursor()
cur.execute('update table stuff set foo = foo + 1')
Saya menemukan persamaan SQLAlchemy SQL-builder:
engine = sqlalchemy.create_engine('sqlite:///mydata.sqlitedb')
md = sqlalchemy.MetaData(engine)
table = sqlalchemy.Table('stuff', md, autoload=True)
upd = table.update(values={table.c.foo:table.c.foo+1})
engine.execute(upd)
Ini sedikit lebih lambat, tapi tidak banyak di dalamnya.
Inilah tebakan terbaik saya untuk pendekatan SQLAlchemy ORM:
# snip definition of Stuff class made using declarative_base
# snip creation of session object
for c in session.query(Stuff):
c.foo = c.foo + 1
session.flush()
session.commit()
Ini melakukan hal yang benar, tetapi itu membutuhkan waktu kurang dari lima puluh kali selama dua pendekatan lainnya. Saya kira itu karena harus membawa semua data ke dalam memori sebelum dapat bekerja dengannya.
Apakah ada cara untuk menghasilkan SQL yang efisien menggunakan ORM SQLAlchemy? Atau menggunakan ORM python lainnya? Atau haruskah saya kembali menulis SQL dengan tangan?