Je ne pense pas que tu puisses. Ainsi, ce n'est pas vraiment une réponse, mais c'est beaucoup trop long pour un commentaire.
Vous pouvez facilement composer votre requête avec 2 colonnes (je suppose que vous le saviez déjà) :
select_query = select([table2.c.col1, table2.c.col2]).where(table1.c.key == table2.c.key)
et ensuite vous pouvez utiliser la méthode with_only_columns()
, voir api
:
In[52]: print(table.update().values(col1 = select_query.with_only_columns([table2.c.col1]), col2 = select_query.with_only_columns([table2.c.col2])))
UPDATE table SET a=(SELECT tweet.id
FROM tweet
WHERE tweet.id IS NOT NULL), b=(SELECT tweet.user_id
FROM tweet
WHERE tweet.id IS NOT NULL)
Mais comme vous le voyez dans l'instruction de mise à jour, vous ferez effectivement deux sélections. (Désolé, je n'ai pas complètement adapté la sortie à votre exemple, mais je suis sûr que vous avez compris).
Je ne sais pas si, comme vous le dites, MySQL
sera assez intelligent pour en faire une seule requête. Je suppose. J'espère que ça aide quand même.