새 응용 프로그램을 시작하고 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()
이것은 옳은 일을하지만 다른 두 가지 접근 방식보다 50 배도 채 걸리지 않습니다. 나는 그것이 작동하기 전에 모든 데이터를 메모리로 가져와야하기 때문이라고 생각합니다.
SQLAlchemy의 ORM을 사용하여 효율적인 SQL을 생성하는 방법이 있습니까? 아니면 다른 파이썬 ORM을 사용하고 계십니까? 아니면 손으로 SQL 작성으로 돌아 가야합니까?