Yeni bir uygulama başlatıyorum ve bir ORM, özellikle SQLAlchemy kullanmaya bakıyorum.
Veritabanımda bir 'foo' sütunum olduğunu ve bunu artırmak istediğimi varsayalım. Düz sqlite'de bu kolaydır:
db = sqlite3.connect('mydata.sqlitedb')
cur = db.cursor()
cur.execute('update table stuff set foo = foo + 1')
SQLAlchemy SQL oluşturucunun eşdeğerini buldum:
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)
Bu biraz daha yavaştır, ancak içinde fazla bir şey yok.
İşte SQLAlchemy ORM yaklaşımı için en iyi tahminim:
# 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()
Bu doğru olanı yapar, ancak diğer ikisi yaklaştığı sürece elli kattan az sürer. Bunun, onunla çalışmadan önce tüm verileri belleğe getirmesi gerektiğinden olduğunu varsayıyorum.
SQLAlchemy'nin ORM'sini kullanarak verimli SQL oluşturmanın herhangi bir yolu var mı? Veya başka bir python ORM kullanıyor musunuz? Yoksa SQL'i elle yazmaya geri mi dönmeliyim?