Kommov
@Kommov

Как сделать такой MySQL запрос на Python?

Есть вот такой MySQL запрос:
BEGIN;
SET @v1 = (
SELECT user FROM users WHERE used = 0 LIMIT 1 FOR UPDATE);
DELETE FROM users WHERE user = @v1;
Select @v1;
COMMIT;

Запрос должен взять юзера, удалить его, и вернуть. Всё одним запросом, чтобы другие потоки не брали его же.
Он работает в воркбенче без ошибок. Пытаюсь запустить из питона:

import pymysql
class Mysql:
    @staticmethod
    def query(sql_, begin=False, commit=False):
        connection = pymysql.connect(host='1.23.3.2', user='test', password='pass', db='mydb', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)       
        try:
            if begin:
                connection.begin()
            with connection.cursor() as cursor:
                cursor.execute(sql_)
                result = cursor.fetchall()
            if commit:
                connection.commit()
        except Exception as p:
            return False, p
        finally:
            connection.close()
        return result

text = тут текст запроса
request = Mysql.query(text, begin=True, commit=True)
print(request)


Всегда выдает ошибку:
(False, ProgrammingError(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...


Куда копать, что делать?
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 1
@galaxy
Вообще-то два запроса в транзакции сделают все, как нужно.
Ответ написан
Ваш ответ на вопрос

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

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