params = defaultdict(list) for item in goods: params['names'].append(item.name) params['date_a'].append(item.date1) params['date_b'].append(item.date2) params['date_c'].append(item.date3) params['text_a'].append(item.text1) params['text_b'].append(item.text2) params['text_c'].append(item.text3) params['integer_a'].append(item.integer) params['ids'].append(item.id) cursor = connection.cursor() cursor.execute('''UPDATE tbl SET "name" = item.name, "date1" = item.date_a, "date2" = item.date_b, "date3" = item.date_c, "text1" = item.text_a, "text2" = item.text_b, "text3" = item.text_c, "integer" = item.integer_a FROM (select unnest(%(names)s) AS price, unnest(%(date_a)s) AS date_a, unnest(%(date_b)s) AS date_b, unnest(%(date_c)s) AS date_c, unnest(%(text_a)s) AS text_a, unnest(%(text_b)s) AS text_b, unnest(%(text_c)s) AS text_c, unnest(%(integer_a)s) AS integer_a, unnest(%(ids)s) AS _id) AS item WHERE tbl."id" = item._id;''', params)
neitro
Мне нужно обновить 10к строк.
Попытки через алхимию и sqlite3 выполняются очень долго ~ 5-10 часов.
Встал вопрос, как это исправить, как ускорить этот процесс, т.е. сделать массовый update.
Без индексов с доп. условиями на слабой машинке обновляет порядка 10k строк за ~1 сек (да, лучше обновлять пачками по несколько тысяч). На 10kk уйдет ~15-16 минут (у вас может быстрее).