Подготовленные параметры оператора могут использоваться только тогда, когда SQL допускает выражения.Имена таблиц не являются выражениями, они должны быть литералами в запросе.Вы можете использовать форматирование строки для замены в строку.
trunc_table = "truncate table %s" % table_name
cur.execute(trunc_table)
Кроме того, я думаю, что вам нужно использовать другой курсор для выполнения второго запроса, пока вы просматриваете результаты первого запроса.Поэтому перед циклом выполните:
cur2 = connection.cursor()
cur2.execute("USE Test")
, а затем используйте
cur2.execute(trunc_table)
в цикле.Другой вариант - сначала использовать cur.fetchall()
, чтобы сначала получить все строки, а затем повторно использовать курсор.
for (table_name,) in cur.fetchall():