मैं एक नया एप्लिकेशन शुरू कर रहा हूं और विशेष रूप से SQLAlchemy - ORM का उपयोग कर रहा हूं।
कहें कि मुझे अपने डेटाबेस में एक कॉलम 'फू' मिला है और मैं इसे बढ़ाना चाहता हूं। सीधे साइक्लाइट में, यह आसान है:
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()
यह सही काम करता है, लेकिन यह अन्य दो दृष्टिकोणों के मुकाबले पचास गुना कम समय लेता है। मुझे लगता है कि क्योंकि यह इसके साथ काम करने से पहले सभी डेटा को स्मृति में लाना है।
क्या SQLAlchemy के ORM का उपयोग करके कुशल SQL उत्पन्न करने का कोई तरीका है? या किसी अन्य अजगर ORM का उपयोग? या मैं बस हाथ से SQL लिखने के लिए वापस जाना चाहिए?