尝试将列表中的值插入表中。
我的桌子叫做玩家,只有一列用户名。
cursor.execute("INSERT INTO players (username) VALUES (?)", name[0])
是我想要插入的内容。
我收到此错误
File "/Users/wilson/PycharmProjects/DraftPwn/Selenium.py", line 73, in getusers
cursor.execute("INSERT INTO players (username) VALUES (?)", name[0])
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 6 supplied.
答案 0 :(得分:2)
execute
方法采用SQL语句和可迭代的参数。
由于name[0]
是一个6个字符的字符串,因此它是一个可迭代的6个单字符字符串。 (因此提供的错误约为6个绑定而不是1.)为什么?这就是Python的工作原理:字符串是可迭代的。你可以在一个简单的循环中看到这个:
>>> for ch in "abc":
... print(ch)
a
b
c
如果你想知道为什么用这种方式设计Python ......那么,你有没有写过s[0]
或s[-3:]
?这就是原因。
无论如何,你不想要一个6个单字符串的迭代,你想要一个6个字符的字符串的可迭代。像这样:
cursor.execute("INSERT INTO players (username) VALUES (?)", (name[0],))
答案 1 :(得分:1)
尝试:
cursor.execute("INSERT INTO players (username) VALUES (?)", (name[0],))
参数应该提供为可迭代的。 name[0]
本身是一个可迭代的,包含6个元素,但语句需要1.所以把它放在tuple
或list
中。
来自doc:
# This is the qmark style:
cur.execute("insert into people values (?, ?)", (who, age))