如何将变量传递给 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()
我正在尝试使用 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()