Python和SQLite表插入

时间:2014-01-16 20:35:41

标签: python sqlite

尝试将列表中的值插入表中。

我的桌子叫做玩家,只有一列用户名。

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.

2 个答案:

答案 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.所以把它放在tuplelist中。

来自doc:

execute(sql[, parameters])

# This is the qmark style:
cur.execute("insert into people values (?, ?)", (who, age))