在 sqlite3 中有一个或两个数字的限制 python

Having a limit in sqlite3 with one or two digits python

问题是当输入(限制)是两位数时会出错。 "Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied." 我试图将其设为整数,但 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))

.execute() 的第二个参数需要是一个序列。例如,您可以传递 listtuple。以下是如何使其成为一个元组:

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.