Оптимизация цикла

Организую перенос из SQL в Excel (сам эксель содержит ID), после чего по ID (в экселе) присваиваю ФИО (сама задача обширнее, для простоты привожу часть). Трудность заключается в том, что на обработку ячейки уходит полминуты, если их несколько тысяч, данные будут обрабатываться очень долго. Думаю над такими вариантами:

  1. через цикл организовать запрос в SQL и доставать сразу нужное мне значение (можно ли питоновскую переменную передать в sql? если да, то как?)
  2. так как я обрабатываю строковое значение ID (пример: 5855830884210365) решил перевести в np.int64, но на скорости это почти никак не сказалось (этот вариант отпадает? или можно его как-то переписать?) Буду рад любым советам. Код:
import pypyodbc
import pandas as pd
import numpy as np
server = 'DMITRY\SQLEXPRESS'
database = 'RGSNEW1'
cnxn = pypyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database)
cursor = cnxn.cursor()
#можно ли тут объявить переменную, к примеру, так: a = '5855830884210365'
query = ("""
               SELECT Pers.Surname, Pers.ID 
FROM Pers 
# чтобы потом вставить сюда WHERE Pers.ID = a
""")
dtb = pd.read_sql(query, cnxn)
dtb.index += 1
xlsx = pd.read_excel("dat1.xlsx", dtype={"A6" : str,"A8" : str})
xlsx.index += 1
dtb2 = dtb.copy(deep=True)
fll = pd.concat([xlsx, dtb2], axis=1)
#меняю тип нужных мне столбцов на np.int64, трайэксепты затем, чтобы пропустить выбросы
for ind in range (0, len(fll)):
    print(ind)
    try:
       fll.at[ind + 1, 'A6'] = np.int64(fll.iloc[ind]['A6'])
    except ValueError:
       continue
for ind in range (0, len(fll)):
    print(ind)
    try:
       fll.at[ind + 1, 'id'] = np.int64(fll.iloc[ind]['id'])
    except ValueError:
       continue
#начинаю перебирать значения и по id (ячейка "A6" содержит id, по которому ищут, столбец id взят с sql) добавляю значение Surname в столбец "A51"
for ind1 in range (0, 25):
   print(ind1)
   for ind in range (0, len(fll)):
      if fll.iloc[ind1]['A6'] == fll.iloc[ind]['id']:
         fll.at[ind1+1, 'A51'] = fll.iloc[ind]['surname']
         break
#fll.to_excel("drr.xlsx")

Ответы (0 шт):