Пожалуйста, предложите мне правильный способ использовать переменную Python в SQL-запрос - PullRequest
0 голосов
/ 10 мая 2018

Я хочу запустить код ниже, но я получаю синтаксическую ошибку.

cur.execute("USE Test") # select the database
cur.execute("SHOW TABLES")

for (table_name,) in cur:
    print(table_name)
    trunc_table="truncate table %s"
    cur.execute(trunc_table, table_name)
    con.commit()

1 Ответ

0 голосов
/ 10 мая 2018

Подготовленные параметры оператора могут использоваться только тогда, когда 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():
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...