Превращение обновления с объединением в запрос вставки в Python 3.6 - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь превратить следующий запрос на обновление (Q1) в запрос вставки, например, (Q2):

Q1: UPDATE a 
        join b on a.b_id = b.id 
    SET a.col1 = some_value, 
        a.col2 = some_value, 
        a.col3 = some_value 
    where a.col4 = some_value 
    and a.col5 = some_value 
    and b.flag = 1

Q2: INSERT INTO `a` (id, col1, col2, col3)  <---HERE I AM NOT ABLE TO FIGURE OUT HOW TO PASS ID AND ACCOMMODATE JOIN
    VALUES 
     (id1, val11, val12, val13),
     (id2, val21, val22, val23)
    ON DUPLICATE KEY 
    UPDATE col1 = VALUES(col1),
           col2 = VALUES(col2),
           col3 = VALUES(col3)
    WHERE a.col4 = some_value and
          a.col5 = some_value and
          b.flag = 1

Здесь Q2 не правильно. Я не могу понять, как обрабатывать объединение идентификатора с предложением where.

На самом деле я пытаюсь преобразовать запрос на обновление в запрос на вставку в моей кодовой базе python 3.6, чтобы я мог использовать executemany() API драйвера pymysql, который позволит мне запускать один и тот же запрос с партией параметров несколько раз. Тем самым я могу сократить время БД.

РЕДАКТИРОВАТЬ :

Я думал об эквивалентном запросе INSERT следующим образом (не уверен в его правильности):

INSERT INTO `a` (id, col1, col2, col3)  
VALUES 
 (SELECT b.id, %s, %s, %s  from
  a join b on a.b_id= b.id
  where a.col4= %s
  and a.col5=%s
  and b.flag=1)
ON DUPLICATE KEY 
UPDATE col1 = VALUES(col1),
       col2 = VALUES(col2),
       col3 = VALUES(col3)
...