Je commence une nouvelle demande et à la recherche, à l'aide d'un ORM-en particulier, SQLAlchemy.
Dire que j'ai une colonne " foo " dans ma base de données et je veux incrémenter. En ligne droite sqlite, c'est facile:
db = sqlite3.connect('mydata.sqlitedb')
cur = db.cursor()
cur.execute('update table stuff set foo = foo + 1')
J'ai compris la SQLAlchemy SQL-générateur équivalent:
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)
C'est un peu plus lent, mais il n'y a pas beaucoup en elle.
Voici ma meilleure supposition pour un SQLAlchemy ORM approche:
# 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()
De ce fait la bonne chose, mais il faut tout de moins de cinquante fois plus longue que les deux autres approches. Je suppose que c'est parce qu'il a pour mettre toutes les données dans la mémoire avant de pouvoir travailler avec elle.
Est-il un moyen de générer de l'efficacité de SQL à l'aide de SQLAlchemy l'ORM? Ou en utilisant tout autre python ORM? Ou devrais-je revenir à l'écriture du SQL à la main?