Slide 13
Slide 13 text
Batch Update SQL Builder
def _build_batch_update_sql (begin_id, end_id):
batch_update_builder = BatchUpdateBuilder ('beyond_users ', begin_id, end_id)
users = (
User.objects
. select_for_update ()
. filter(id__gte=begin_id, id__lte=end_id)
)
for user in users:
if user.first_name:
batch_update_builder. update(user.id, 'last_name ', user.first_name[ ::-1])
return batch_update_builder. build_sql ()
@transaction.atomic ()
def _update_last_name_in_batch (boundaries):
begin_id, end_id = boundaries
update_sql = _build_batch_update_sql (begin_id,
end_id)
if update_sql:
cursor = connection. cursor()
cursor. execute(update_sql)
cursor. close()
_sleep_throttle ()
eta_calculator. update_progress_and_print (1)