Обновление таблицы из другой таблицы с несколькими столбцами в sqlalchemy

Я хочу обновить несколько столбцов одной таблицы в соответствии с другими несколькими столбцами другой таблицы в SQLAlchemy. Я использую SQLite при тестировании, поэтому я не могу использовать синтаксис `UPDATE table1 SET col = val WHERE table1.key == table2.key.

Другими словами, я пытаюсь создать такой запрос на обновление:

UPDATE table1 SET col1 = (SELECT col1 FROM table2 WHERE table2.key == table1.key), col2 = (SELECT col2 FROM table2 WHERE table2.key == table1.key) 

В SQLAlchemy:

 select_query1 = select([table2.c.col1]).where(table1.c.key == table2.c.key) select_query2 = select([table2.c.col2]).where(table1.c.key == table2.c.key) session.execute(table.update().values(col1=select_query1, col2=select_query2)) 

Только я хотел бы сделать запрос только один раз, а не дважды, если только SQLite и MySQL не будут достаточно умны, чтобы не сделать этот запрос дважды.

One Solution collect form web for “Обновление таблицы из другой таблицы с несколькими столбцами в sqlalchemy”

Я не думаю, что ты можешь. Таким образом, на самом деле это не ответ, но слишком длинный комментарий.

Вы можете легко составить свой запрос с помощью двух столбцов (я думаю, вы уже знали это):

 select_query = select([table2.c.col1, table2.c.col2]).where(table1.c.key == table2.c.key) 

а затем вы можете использовать метод with_only_columns() , см. 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) 

Но, как вы видите из инструкции update, вы будете эффективно делать два выбора. (Извините, я не полностью адаптировал вывод к вашему примеру, но я уверен, что вы поняли эту идею).

Я не уверен, будет ли, как вы говорите, MySQL достаточно умным, чтобы сделать его только одним запросом. Полагаю, что так. Надеюсь, он все равно поможет.

  • Как я могу получить dict из запроса sqlite?
  • python no module с именем serial
  • Подстановка SQLite и кавычки
  • Исключение символов в Python и sqlite
  • экспорт из / импорта в numpy, scipy в форматах SQLite и HDF5
  • Sqlite3 Обновление строки, определяемой переменной
  • Определите максимальное количество столбцов из sqlite3
  • Проблема с заменой параметра SQLite
  • Sqlite и Python - вернуть словарь с использованием fetchone ()?
  • Вставить двоичный файл в базу данных SQLite с помощью Python
  • Отображение строк результатов в namedtuple в python sqlite
  • Python - лучший язык программирования в мире.