Je cherche un exemple complet d'utilisation de SELECT pour la mise à jour dans SQLALCHEMY, mais je n'ai pas trouvé un googling. Je dois verrouiller une seule ligne et mettre à jour une colonne, le code suivant ne fonctionne pas (blocs pour toujours):
s = table.select(table.c.user=="test",for_update=True)
# Do update or not depending on the row
u = table.update().where(table.c.user=="test")
u.execute(email="foo")
Ai-je besoin d'un commit? Comment je fais ça? Autant que je sache, vous devez: commencer la transaction Sélectionnez ... pour mettre à jour la mise à jour commettre
Si vous utilisez l'ORM, essayez la fonction with_for_update Fonction:
[.____] foo = session.Quisery (foo) .filter (foo.id == 1234) .with_for_update (). Un () [) [.____] # Cette ligne est maintenant verrouillée foo.name = 'bar' session.add (foo) [.____] [.____] session.commit () # Cette ligne est maintenant déverrouillée
Oui, vous devez vous engager, que vous pouvez exécuter sur le Engine
ou créer un Transaction
explicitement. De plus, les modificateurs sont spécifiés dans la méthode values(...)
et non execute
:
>>> conn.execute(users.update().
... where(table.c.user=="test").
... values(email="foo")
... )
>>> my_engine.commit()