如何将变量传递给 MySQL 的 LIMIT 子句?

How to pass a variable to MySQL's LIMIT clause?

我正在尝试使用 pymysql 向 Mysql 数据库创建一个 SELECT 语句。 这是代码。我将一个变量传递给 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)

错误:

这是我努力实现的目标:Return the nth record from MySQL query

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")

LIMIT in 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()

您没有以字符串格式为 %s 传递值 1。 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()