Как передать переменную в предложение 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()
Другие вопросы по тегам