@TemaKam

Почему не создается таблица в БД?

вообще не могу понять, что не так
сотнями способами уже пробовал и все равно что-то не нравится

name = self.task_name.toPlainText().replace('\n', '')
query = """/*!40101 SET @saved_cs_client = @@character_set_client */;
DROP TABLE IF EXISTS %s;
CREATE TABLE %s 
(id int(11) NOT NULL AUTO_INCREMENT,
account varchar(255) NOT NULL,
token varchar(255) NOT NULL,
proxy varchar(255) NOT NULL,
status varchar(255) NOT NULL,
ReasonBlock varchar(255) NOT NULL,
Provider varchar(255) NOT NULL,
idUser varchar(255) NOT NULL,
activ varchar(10) NOT NULL,
FIO varchar(255) NOT NULL,
Sex varchar(255) NOT NULL,
Age int(11) NOT NULL,
Country varchar(255) NOT NULL,
City varchar(255) NOT NULL,
Friends int(11) NOT NULL,
Followers int(11) NOT NULL,
frfol int(11) NOT NULL,
grouplinks varchar(255) NOT NULL,
groupaudit int(11) NOT NULL,
avatar varchar(10) NOT NULL,
oldProvider varchar(255),
oldDate varchar(255),
PRIMARY KEY (id))
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 
/*!40101 SET character_set_client = @saved_cs_client */;"""
cursor.execute(query, [name, name])

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET character_set_client = utf8 */;\nDROP TABLE IF EXISTS 'Перечек';\nCREAT' at line 2")

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET character_set_client = utf8 */;\nDROP TABLE IF EXISTS Перечек;\nCREATE ' at line 2")

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP TABLE IF EXISTS 'Перечек';\nCREATE TABLE 'Перечек' \n(id int(11' at line 2")

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET character_set_client = utf8mb4 */;\nDROP TABLE IF EXISTS 'Перечек';\nCR' at line 2")

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP TABLE IF EXISTS 'Перечек';\nCREATE TABLE 'Перечек' \n(id int(11' at line 2")

UPD
причем при другом запросе ошибок нет
query = f"DROP TABLE IF EXISTS {name};"
  • Вопрос задан
  • 361 просмотр
Решения вопроса 2
@galaxy
Нельзя имена таблиц (и колонок) передавать в запрос как параметры. Используйте хотя бы str.format()
query = """/*!40101 SET @saved_cs_client = @@character_set_client */;
DROP TABLE IF EXISTS {};
CREATE TABLE {} 
...
""".format(name, name)
cursor.execute(query)
Ответ написан
@o5a
Основная проблема в наличии нескольких команд в одном SQL запросе. По умолчанию execute может исполнить только одну команду. Т.е. нужно разбить исполнение на несколько запусков execute.
cursor.execute("DROP TABLE ...")
cursor.execute("CREATE TABLE IF EXISTS ... ")

Другой вариант - использовать флаги:
https://stackoverflow.com/questions/58544640/pymys...

Но и как уже заметили, создавать и удалять таблицы - плохой дизайн. Лучше разделять задачи или еще что там нужно на уровне полей самих таблиц, которые фиксированы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы