Tôi đang bắt đầu một ứng dụng mới và xem xét việc sử dụng ORM - cụ thể là SQLAlchemy.
Giả sử tôi có một cột 'foo' trong cơ sở dữ liệu của mình và tôi muốn tăng nó lên. Trong sqlite thẳng, điều này rất dễ dàng:
db = sqlite3.connect('mydata.sqlitedb')
cur = db.cursor()
cur.execute('update table stuff set foo = foo + 1')
Tôi đã tìm ra SQLAlchemy SQL-builder tương đương:
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)
Điều này hơi chậm hơn một chút, nhưng không có nhiều thứ trong đó.
Đây là dự đoán tốt nhất của tôi cho cách tiếp cận ORM SQLAlchemy:
# 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()
Điều này làm đúng, nhưng chỉ mất chưa đến năm mươi lần khi hai phương pháp còn lại tiếp cận. Tôi cho rằng đó là bởi vì nó phải đưa tất cả dữ liệu vào bộ nhớ trước khi nó có thể hoạt động với nó.
Có cách nào để tạo SQL hiệu quả bằng cách sử dụng ORM của SQLAlchemy không? Hoặc sử dụng bất kỳ ORM python nào khác? Hay tôi nên quay lại viết SQL bằng tay?