Cette question a été posée plusieurs fois sur stackoverflow, mais ils semblaient tous avoir plus d'un an donc je me suis dit que je demanderais à nouveau au cas où il y aurait eu une mise à jour.Mise à jour corrélée SQLAlchemy avec plusieurs colonnes?
correlated update
est une instruction de mise à jour qui met à jour toutes les lignes d'une table en fonction des valeurs d'une autre table, tout en reliant les deux tables.
De l'SQLAlchemy docs, nous pouvons faire une mise à jour corrélée facilement, mais seulement sur une seule colonne:
update(foo).values(bar=select([foobar.c.bar]).where(foobar.c.id == foo.c.id))
Cela se traduit par:
UPDATE foo
SET bar = (
SELECT bar
FROM foobar
WHERE foobar.id = foo.id
)
Comment peut-on écrire une mise à jour connexes en utilisant plus de une colonne dans sqlalchemy? Par exemple:
UPDATE foo
SET (bar, baz) = (
SELECT bar, baz
FROM foobar
WHERE foobar.id = foo.id
)
Vous êtes un héros; Je vous remercie! Je vous demanderais de spammer cette réponse sur chaque question de 'mise à jour corrélée avec plusieurs colonnes' que vous pouvez trouver! –
Y a-t-il un avantage à utiliser votre première approche par rapport à la deuxième approche? –
Je suppose que ne pas avoir à faire le test EXISTS séparé afin de ne pas mettre à jour les lignes inégalées dans la 1ère approche est un avantage par rapport à la 2ème. Bien que la première approche puisse mieux prendre en charge les vues jointes complexes, elle est limitée par [préservation de clé] (http://docs.oracle.com/cd/E11882_01/server.112/e25494/views.htm#ADMIN11783). Cela pourrait ou non vous forcer à opter pour la deuxième approche dans certains cas. J'ai très peu ou pas d'expérience avec Oracle, donc je vais devoir laisser les détails au lecteur. –