首页 > 解决方案 > 不能在 sqlite3 中使用 2 位数字

问题描述

此代码非常适用于一位数字,但是当使用 2 位数字时,会显示以下错误...有人可以帮我解决这个问题吗?:)

代码

import sqlite3

connie = sqlite3.connect('pb.db')
c = connie.cursor()
test = 11
real = (str(test))
c.execute("""
SELECT result FROM results
INNER JOIN users ON users.id = results.user_id
WHERE users.id = (?)
""",real)

result_list = c.fetchall()

for result in result_list:
    print(result[0])


connie.close()

错误

"C:\Users\britsge\OneDrive - Iona College\Year 11\DSO\PowerballSite\venv\Scripts\python.exe" "C:/Users/britsge/OneDrive - Iona College/Year 11/DSO/PowerballSite/db-select-ingredient-list.py"
Traceback (most recent call last):
  File "C:/Users/britsge/OneDrive - Iona College/Year 11/DSO/PowerballSite/db-select-ingredient-list.py", line 11, in <module>
    """,real)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.

标签: pythonsqlite

解决方案


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

例子:

cursor.execute('INSERT INTO images VALUES(?)', (img,))

在你的情况下:只需要两个参数。

  • 它将迭代“数组”对象并匹配?在 sql-string 中。(进行完整性检查以避免 sql 注入)

  • 将 , real) 更改为 , (real,))

    cursor.execute(sql,数组)

你的:

c.execute("""SELECT result FROM results INNER JOIN users ON users.id = results.user_id WHERE users.id = (?) """,real)

将其更改为:

c.execute("SELECT result FROM results INNER JOIN users ON users.id = results.user_id WHERE users.id = (?) ", change ,(real,))

推荐阅读