新しいアプリケーションを開始し、ORM、特にSQLAlchemyの使用を検討しています。
データベースに「foo」という列があり、それを増やしたいとしましょう。ストレートSQLiteでは、これは簡単です。
db = sqlite3.connect('mydata.sqlitedb')
cur = db.cursor()
cur.execute('update table stuff set foo = foo + 1')
SQLAlchemy SQLビルダーに相当するものを見つけました。
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)
これは少し遅いですが、それほど多くはありません。
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()
これは正しいことですが、他の2つのアプローチを実行する場合と比べて50倍弱かかります。それはそれが機能する前にすべてのデータをメモリに読み込まなければならないためだと思います。
SQLAlchemyのORMを使用して効率的なSQLを生成する方法はありますか?または他のPython ORMを使用していますか?それとも、SQLを手作業で書くことに戻るべきでしょうか?