получение синтаксической ошибки mysql при попытке вставить переменную в качестве имени таблицы и значений - PullRequest
0 голосов
/ 21 марта 2020
            if conn.is_connected():
                cursor = conn.cursor()
                sql = '''CREATE TABLE IF NOT EXISTS `%s`(
                id INT AUTO_INCREMENT PRIMARY KEY,
                title VARCHAR(255) NOT NULL,
                rating VARCHAR(255) NOT NULL, 
                reservation_rate VARCHAR(255) NOT NULL
                )''' % day
                cursor.execute(sql)            


            x = 1
            for i in range(len(title_rank)):
                title = rank[0][i]
                rating = rank[1][i]
                reservation = rank[2][i]
                cursor.execute("""INSERT INTO `%s`(id, title, rating, reservation_rate), (%d, %s, %s, %s))
                """%(day, x, title, rating, reservation))
                x += 1
                conn.commit()

, хотя я смог создать таблицу без проблем, используя описанный выше метод, но для второй части кода я получаю синтаксическую ошибку, и я не знаю причину. пытался использовать функцию форматирования, но не работал. это ошибка, которую я получаю:

1064 (42000): у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей MySQL версии сервера, на предмет правильного синтаксиса для использования рядом с ', (1, 인 비저블 맨, скорость: 6,7, .2 25,2%))' в строке 1

1 Ответ

0 голосов
/ 21 марта 2020

Форма INSERT:

INSERT INTO `%s`(id, title, rating, reservation_rate) VALUES (%d, %s, %s, %s)

Неверный синтаксис ,.

Вы также должны быть абсолютно уверены, вы используя execute со значениями-заполнителями:

 cursor.execute("""INSERT INTO tablename (id, title, rating, reservation_rate), (%d, %s, %s, %s))
            """, (day, x, title, rating, reservation))

НИКОГДА используйте интерполяцию строк, чтобы сделать это вместо %. Это открывает вам SQL ошибок впрыска .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...