Я работаю над некоторыми сценариями ETL и столкнулся с проблемой, когда использую инструкцию MERGE.Я использую executemany
для запуска сценария SQL, который выглядит следующим образом:
MERGE myTable as target
USING (
SELECT myID from myTable
WHERE myID = ?
) AS source (myID) ON (target.myID = source.myID)
WHEN NOT MATCHED THEN
INSERT (myID, myName, myProperty, myOtherProperty)
VALUES(?, ?, ?, ?)
WHEN MATCHED THEN
UPDATE SET myName=?, myProperty=?, etc...;
Проблема здесь в том, что мне нужно свойство myID
в нескольких местах.И в операторе SELECT
, и в операторах INSERT
и UPDATE
.Вы не можете повторно использовать свойства так, как я это сделал, потому что ?
s заполнены свойствами из фрейма данных, и я не могу найти способ повторно использовать свойства.
Насколько я понимаю, мойпоследнее усилие по канаве должно было использовать цикл for
для итерации по фрейму данных и выполнения одиночного выполнения в каждой строке.На мой взгляд, это единственный способ, которым я могу назначить некоторые переменные, чтобы затем использовать их для построения моего SQL-запроса, однако я хотел бы знать, есть ли более простой или лучший способ сделать это.