ฉันกำลังเริ่มแอปพลิเคชันใหม่และกำลังมองหาการใช้ ORM โดยเฉพาะอย่างยิ่ง SQLAlchemy
สมมติว่าฉันมีคอลัมน์ 'foo' ในฐานข้อมูลของฉันและฉันต้องการเพิ่มคอลัมน์ ใน sqlite ตรงนี่เป็นเรื่องง่าย:
db = sqlite3.connect('mydata.sqlitedb')
cur = db.cursor()
cur.execute('update table stuff set foo = foo + 1')
ฉันพบว่า 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)
ช้ากว่าเล็กน้อย แต่ก็มีไม่มาก
นี่คือการคาดเดาที่ดีที่สุดของฉันสำหรับแนวทาง 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()
สิ่งนี้เป็นสิ่งที่ถูกต้อง แต่ใช้เวลาไม่ถึงห้าสิบเท่าตราบเท่าที่อีกสองแนวทาง ฉันคิดว่านั่นเป็นเพราะต้องนำข้อมูลทั้งหมดไปไว้ในหน่วยความจำก่อนจึงจะสามารถใช้งานได้
มีวิธีใดในการสร้าง SQL ที่มีประสิทธิภาพโดยใช้ ORM ของ SQLAlchemy หรือไม่ หรือใช้ python ORM อื่น ๆ ? หรือฉันควรกลับไปเขียน SQL ด้วยมือ?