Eu não acho que você pode. Portanto, isso não é realmente uma resposta, mas é muito longo para um comentário.
Você pode facilmente compor sua consulta com 2 colunas (acho que você já sabia disso):
select_query = select([table2.c.col1, table2.c.col2]).where(table1.c.key == table2.c.key)
e depois você pode usar o método
with_only_columns()
, consulte 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)
Mas como você vê na instrução de atualização, você estará efetivamente fazendo duas seleções. (Desculpe, não adaptei a saída completamente ao seu exemplo, mas tenho certeza que você entendeu).
Não tenho certeza se, como você diz,
MySQL
será inteligente o suficiente para torná-lo uma consulta apenas. Eu acho. Espero que ajude de qualquer maneira.