Non credo che tu possa. Quindi, questa non è davvero una risposta, ma è troppo lunga per un commento.
Puoi facilmente comporre la tua query con 2 colonne (suppongo che lo sapessi già):
select_query = select([table2.c.col1, table2.c.col2]).where(table1.c.key == table2.c.key)
e successivamente puoi usare il metodo with_only_columns()
, vedi 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)
Ma come vedi dalla dichiarazione di aggiornamento, farai effettivamente due selezioni. (Scusa se non ho adattato completamente l'output al tuo esempio, ma sono sicuro che l'idea ti sia venuta).
Non sono sicuro se, come dici tu, MySQL
sarà abbastanza intelligente da farne una sola query. Credo di si. Spero che aiuti comunque.