我试图检查一行是否存在并包含一些预期值,但我不断收到此错误:
提供的绑定数量不正确。当前语句使用 1, 并提供 5 个。
这是错误的最小再现:
import sqlite3
db_file = "test.db"
con = sqlite3.connect(db_file)
cur = con.cursor()
cur.execute('DROP TABLE IF EXISTS image')
cur.execute('''
CREATE TABLE image(
id INTEGER PRIMARY KEY,
listing_id TEXT NOT NULL,
url TEXT NOT NULL,
image BLOB NOT NULL
)''')
res = con.execute('''
SELECT listing_id, url FROM image WHERE listing_id=?
''', 'id123')
结果:
---------------------------------------------------------------------------
ProgrammingError Traceback (most recent call last)
Cell In[1], line 15
7 cur.execute('DROP TABLE IF EXISTS image')
8 cur.execute('''
9 CREATE TABLE image(
10 id INTEGER PRIMARY KEY,
(...)
13 image BLOB NOT NULL
14 )''')
---> 15 res = con.execute('''
16 SELECT listing_id, url FROM image WHERE listing_id=?
17 ''', 'id123')
ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 5 supplied.
我在这里做错了什么?
您收到的错误是因为当
'id123'
方法需要其参数的元组时,您正在传递字符串 execute()
。当您直接提供字符串时,它会将字符串中的每个字符视为单独的参数,从而导致绑定数量错误。
以下是修复错误的方法:
res = con.execute('''
SELECT listing_id, url FROM image WHERE listing_id=?
''', ('id123',))