У меня есть код SQL: < /p>
CREATE TABLE TABLE_1 AS
(
SELECT ACCOUNT, 0 AS REDEEMER
FROM ACCOUNTS
)
WITH DATA
IN MY_SCHEMA
COMPRESS YES
;
MERGE INTO TABLE_1 A
USING
(
SELECT ACCOUNT
FROM REDEEMERS
WHERE CATEGORY = 'x'
) B
ON A.ACCOUNT = B.ACCOUNT
WHEN MATCHED THEN UPDATE
SET A.REDEEMER = 1
;
< /code>
Допустим, Table_1 выглядит так, когда создается, с Sleeemer, установленным на 0 для всех строк: < /p>
account | redeemer
------------------
a | 0
b | 0
c | 0
< /code>
Если учетные записи A и C имеют выкупленную категорию X, слияние должно сделать таблицу_1 выглядеть следующим образом: < /p>
account | redeemer
------------------
a | 1
b | 0
c | 1
< /code>
Это работает так, как задумано. Теперь я хочу сделать это для нескольких категорий по очереди, внедряя SQL в цикл в Python, используя SQLalchemy, например: < /p>
connection.execute(
f'''
CREATE TABLE TABLE_1 AS
(
SELECT ACCOUNT, 0 AS REDEEMER
FROM ACCOUNTS
)
WITH DATA
IN MY_SCHEMA
COMPRESS YES
;''')
categories = [
"x",
"y",
"z"
]
for i in categories:
#Set redeemer column to 1 for redeemers of the current category
connection.execute(
f'''
MERGE INTO TABLE_1 A
USING
(
SELECT ACCOUNT
FROM REDEEMERS
WHERE CATEGORY = '{i}'
) B
ON A.ACCOUNT = B.ACCOUNT
WHEN MATCHED THEN UPDATE
SET A.REDEEMER = 1
;''')
#Code to do some stuff with the data in table_1 goes here
#Set redeemer column back to 0 in preparation for the next loop
connection.execute(
f'''
UPDATE TABLE_1
SET REDEEMER = 0
;''')
< /code>
Однако это не достигает желаемого результата. Там нет сообщения об ошибке, но столбец Искупителя, похоже, не обновляется слиянием. Я добавил оператор SUM сразу после слияния, которое подтверждает, что REEEMER все еще установлен на 0 для всех рядов.
Почему этот код не работает при запуске Python? /p>
#Set redeemer column to 1 for redeemers of the current category
with Session(connection) as session:
connection.execute(
f'''
MERGE INTO TABLE_1 A
USING
(
SELECT ACCOUNT
FROM REDEEMERS
WHERE CATEGORY = '{i}'
) B
ON A.ACCOUNT = B.ACCOUNT
WHEN MATCHED THEN UPDATE
SET A.REDEEMER = 1
;''')
session.commit()
Подробнее здесь: https://stackoverflow.com/questions/793 ... ython-loop
Как запустить оператор Merge SQL в петле Python? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение