Как передать переменную в предложение LIMIT MySQL?
Я пытаюсь сделать оператор SELECT для базы данных Mysql с помощью pymysql. Это код. Я передаю переменную в оператор select, и, к моему удивлению, это огромная боль в лимоне. Есть идеи, что мне здесь не хватает?
def getUrlFromDatabase(n):
stmt = "SELECT * FROM jsonTes ORDER BY website LIMIT %s-1,1"
cur.execute(stmt,str(n))
return cur.fetchone()
conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='passwd', db='email_database', charset='utf8')
cur = conn.cursor()
cur.execute("USE database")
getUrlFromDatabase(0)
Ошибка:
Вот чего я пытаюсь добиться: вернуть n-ую запись из запроса MySQL.
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 ''0'-1,1' at line 1")
3 ответа
Решение
LIMIT
в MySQL принимает числовые аргументы, которые должны быть неотрицательными целочисленными константами. Вы должны вычислить выражение в Python, а затем передать целое число в качестве одного параметра. Также вам нужно поместить параметр в кортеж:
def getUrlFromDatabase(n):
stmt = "SELECT * FROM jsonTes ORDER BY website LIMIT %s, 1"
cur.execute(stmt, (n-1 if n > 0 else 0,))
return cur.fetchone()
Вы не передаете значение 1 для%s в формате строки.stmt = "SELECT * FROM jsonTes ORDER BY website LIMIT %s" %n
для предела n
Вы можете использовать так
def getUrlFromDatabase(n):
stmt = "SELECT * FROM jsonTes ORDER BY website LIMIT {}, 1"
cur.execute(stmt.format(n-1 if n > 0 else n))
return cur.fetchone()