Есть вот такой 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...
Куда копать, что делать?