#python #mysql
#питон #mysql
Вопрос:
Я хочу создать таблицу с помощью скрипта python, выполняющего sql, но хочу очистить любые таблицы с тем же именем, которые могут уже существовать. Приведенный ниже код выдает ошибку «mysql.connector.errors.ProgrammingError: 1064 (42000): У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘CREATE TABLE grocery( id
int (11) NOT NULL AUTO_INCREMENT, item
varchar (25) D’ в строке 1″.
Я могу заставить код работать построчно по отдельности, но не уверен, как объединить все это в один скрипт, чтобы он выполнялся одновременно через python.
import mysql.connector
db = mysql.connector.connect(
host = "localhost",
user= "test",
password = 'test',
database = "grocery"
)
cursor = db.cursor()
sql = "DROP TABLE IF EXISTS groceries, CREATE TABLE groceries(`id` int(11) NOT NULL AUTO_INCREMENT,`item` varchar(25) DEFAULT NULL, `name` varchar(25) DEFAULT NULL, `quantity` int(11) DEFAULT NULL,PRIMARY KEY (`id`))"
cursor.execute(sql)
Комментарии:
1. Попробуйте использовать точку с запятой в конце каждого оператора (
DROP TABLE IF EXISTS groceries; CREATE ...
)2. Я попробовал это и получил «mysql.connector.errors. InterfaceError: используйте multi= True при выполнении нескольких инструкций», а затем я добавил cursor.execute(sql, multi= True), и, похоже, теперь он работает. Спасибо за подсказку.
3. Изменить
cursor.execute(sql)
наcursor.execute(sql, multi = True)
Ответ №1:
Вы получаете синтаксическую ошибку, потому что вы используете запятые вместо точек с запятой для разделения операторов DROP TABLE IF EXISTS
and CREATE TABLE
Если вы разделите свои операторы SQL точкой с запятой, вы сможете выполнить свой код.
Кроме того, вам нужно сообщить вашему соединителю, что существует несколько операторов с multi=true
Окончательный код выглядит так:
sql = """
DROP TABLE IF EXISTS groceries;
CREATE TABLE groceries(
`id` int(11) NOT NULL AUTO_INCREMENT,
`item` varchar(25) DEFAULT NULL,
`name` varchar(25) DEFAULT NULL,
`quantity` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)
"""
cursor.execute(sql, multi=true)