问题是当输入(限制)是两位数时,它会给出错误。 "提供的绑定数量不正确。当前语句使用1,并且提供了2个。"我试图使它成为一个整数,但SQLite3需要字符串。如果我定义一个常量,它仍然不起作用。但如果它是一位数字,它就可以工作。
limit = input("Enter the number of scores you want to see: ")
self.cursor.execute('SELECT Name, Gender, Age, Score, Date, Time FROM Link JOIN Scores ON Score_ID = Scores.ID JOIN Player ON Player_ID = Player.id ORDER BY Score DESC LIMIT ?', (limit))
答案 0 :(得分:3)
.execute()
的第二个参数需要是一个序列。例如,您可以传递list
或tuple
。以下是如何使它成为一个元组:
self.cursor.execute(
'SELECT Name, Gender, Age, Score, Date, Time FROM Link JOIN Scores ON Score_ID = Scores.ID JOIN Player ON Player_ID = Player.id ORDER BY Score DESC LIMIT ?',
(limit,))
以下是如何将其列为清单:
self.cursor.execute(
'SELECT Name, Gender, Age, Score, Date, Time FROM Link JOIN Scores ON Score_ID = Scores.ID JOIN Player ON Player_ID = Player.id ORDER BY Score DESC LIMIT ?',
[limit])
注意:
limit='9'
有效但limit='10'
失败的原因是字符串也是序列。序列的元素是构成较大字符串的1个字符的字符串。因此,在第一种情况下,您传递单个参数'9'
。在第二个中,您传递了两个参数'1'
和'0'
。
(limit)
失败但(limit,)
成功的原因与Python语法的怪癖有关。括号()
用于表达式分组和元组创建。 (obj)
只是对象obj
本身。另一方面,(obj,)
是一个成员tuple
。