2014-02-12 3 views
0

У меня есть словарь python «люди», заполненный запросом к PostgreSQL. Я делаю некоторую обработку, которая не требует никакого взаимодействия с базой данных. Таким образом, код идетpython массовое обновление таблиц

for person in persons: 
    process 

Основываясь на успех/провал процесса, я установить флаг для каждой записи в словаре. Как только процесс закончен, я хочу обновить таблицу данными в словаре. Можно ли это сделать без цикла/итерации? Сейчас я делаю обновление внутри цикла. Когда список большой, это связано с слишком большим количеством запросов к базе данных.

+0

Вы можете объединить SQL 'UPDATE' и запустить их после формирования всего запроса. То есть, в каждом 'process' concatenate что-то вроде' UPDATE table SET col = val, ... WHERE condition' - строка, которую вы будете использовать для запуска команды SQL. – linkyndy

+0

Это вариант, который я изучаю. Существует ли более простой способ - например, «таблица обновлений x установить y = 0, где id in (persons.id)». Может быть, желаемое за действительное – Jayadevan

+1

Вы ** можете ** использовать оператор 'IN' в предложении' WHERE', но я не думаю, что можно установить значения _different_ для измененных столбцов. Если вы хотите обновить нужные столбцы с одинаковым значением для всех запрошенных строк, это будет работать. – linkyndy

ответ

0

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

sql = """ 
    BEGIN; 
    UPDATE table SET field = value1 WHERE id = 1; 
    UPDATE table SET field = value2 WHERE id = 2; 
    ... 
    UPDATE table SET field = valueN WHERE id = N; 
    END; 
""" 

Вы сможете выполнить один запрос транзакции для создания нескольких запросов UPDATE.

Смежные вопросы