web-dev-qa-db-fra.com

SQLALCHEMY - Sélectionnez l'exemple de mise à jour

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

29
user317033

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 
22
Matthew Moisen

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()
4
van