@Edge226

PyMySQL не хочет принимать определенный запрос, в чем может быть проблема?

Пытаюсь выполнить вот этот запрос через execute в pymysql
DELIMITER // CREATE TRIGGER setUUID BEFORE INSERT ON `users`, FOR EACH ROW BEGIN IF NEW.uuid IS NULL THEN SET NEW.uuid = UUID(); END IF; END; // DELIMITER ;


Выводит ошибку
pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER // CREATE TRIGGER setUUID BEFORE INSERT ON `users`, FOR EACH ROW BE...' at line 1")

Все ни не могу понять, в чем проблема? Помогите пожалуйста. Может я не так составил MySQL запрос? Просто в том же клиенте для MySQL, он работает спокойно.
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
DELIMITER - это не SQL-запрос, а команда клиента. PyMySQL - это не клиентская программа, а библиотека доступа, которая ни про какой DELIMITER не знает и знать не должна. Отсюда и ошибка. Опять же - нет никакого смысла напихивать в код лишнюю логику, без которой можно спокойно обойтись.

А если от всей лишней шелухи избавиться, то от всей логики останется один-единственный оператор. Который сделает использование DELIMITER и вовсе ненужным.

CREATE TRIGGER setUUID 
BEFORE INSERT ON users
FOR EACH ROW 
	SET NEW.uuid = COALESCE(NEW.uuid, UUID());
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Гугл говорит, что DELIMITER - это фича именно клиента, а не сервера MySql. Поэтому команда не поддерживается сторонними библиотеками.
И разве там синтаксис для тела хранимки/триггера не BEGIN ... END?
Ответ написан
Ваш ответ на вопрос

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

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