Как объединить несколько кодов sql в один блок для запуска python?

#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)