Я пытаюсь динамически создать инструкцию SQL Server EXECUTE для повторного использования в процессах таблиц ETL. Таким образом, необходимое количество строковых переменных зависит от файла SQL, переданного в переменную query
. Вот один из них:
execute mergeTable1
@param1 = '{}',
@param2 = '{}',
@param3 = '{}',
@param4 = '{}',
@param5 = '{}',
@param6 = '{}',
@param7 = '{}',
@param8 = '{}',
@param9 = '{}'
Я выполняю хранимую процедуру для каждой строки в кадре данных pandas. Когда я создал эту функцию «execute», я создал ее для одного табличного процесса.
Вот оригинальный рабочий код:
def mergeTable1(self, query, df) :
for index, row in df.iterrows() :
retryFlag = True
retryCount = 0
while retryFlag and retryCount < 5 :
try :
self.cur.execute(query.format(row['column1'], row['column2'], row['column3'], ...))
retryFlag = False
except Exception as error :
print('error executing query "{}", error: {}'.format(query, error))
retryCount = retryCount + 1
time.sleep(1)
self.cxn.commit()
Я все еще новичок в этом (впервые провожу более чем несколько дней, учась), так что я мог что-то упустить в том, чтоЯ уже пробовал.
Тем не менее, большая часть того, что я могу найти, это больше об операторах вставки с определенными именами столбцов. Это, вероятно, часть [row()]
, которая сбивает меня с толку. Можно ли (не ненавижу) делать что-то, что я могу использовать для любого запроса SQL EXECUTE? Может быть, что-то вроде этого ...
def execute(self, query, df) :
for column in df :
# query.format(row['column1'], row['column2'], row['column3'], ...)
for index, row in df.iterrows() :
retryFlag = True
retryCount = 0
while retryFlag and retryCount < 5 :
try :
self.cur.execute(query)
retryFlag = False
except Exception as error :
print('error executing query "{}", error: {}'.format(query, error))
retryCount = retryCount + 1
time.sleep(1)
self.cxn.commit()
Извините еще раз, если я что-то упускаю тривиально. Можно подумать, что это была пятница с тем, как размыта моя голова сейчас!