Python Sqlite3 executemany 中的绑定数量不正确
Incorrect number of bindings in Python Sqlite3 executemany
所以我在 Python 中有一个 sqlite3 数据库,其中 table 我试图向其中添加 1000 个字符串。问题是,当我使用 executemany 命令时出现错误
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 1000 supplied.
这是我的简化代码:
db = sqlite3.connect("service.db")
db.isolation_level = None
c = db.cursor()
c.execute("CREATE TABLE Places (id INTEGER PRIMARY KEY, name TEXT)")
toBeAdded = [0]*1000
i = 0
while i < 1000:
toBeAdded[i] = ("P"+str(i+1))
i += 1
c.executemany("INSERT INTO Places(name) VALUES (?)",[toBeAdded])
我也尝试了最后一条命令的不同形式,但没有成功。这是我在 Google 上找到的唯一方法。
您已向 executemany
提供了一个平面列表。相反,该方法需要一个嵌套结构,每个内部序列代表一组要添加到查询中的参数。
因此,您希望 ['P0', 'P1', 'P2', ...]
成为 [['P0'], ['P1'], ['P2'], ...]
。您可以通过在创建列表时添加方括号来解决此问题,使其嵌套:
toBeAdded = [0]*1000
i = 0
while i < 1000:
toBeAdded[i] = [("P"+str(i+1))] # Note the surrounding square brackets
i += 1
补充反馈
生成数据的更好方法是使用 for
循环并摆脱 while
循环 - 您有预先确定的迭代次数要执行,所以它是惯用的使用 for
。您也不需要事先初始化列表。
to_be_added = []
for i in range(1000):
to_be_added.append([("P"+str(i+1))])
或者,使用列表理解:
to_be_added = [[("P"+str(x+1))] for x in range(1000)]
您会注意到我已经从变量名中删除了驼峰命名;这符合 Python 风格指南 - PEP8
所以我在 Python 中有一个 sqlite3 数据库,其中 table 我试图向其中添加 1000 个字符串。问题是,当我使用 executemany 命令时出现错误
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 1000 supplied.
这是我的简化代码:
db = sqlite3.connect("service.db")
db.isolation_level = None
c = db.cursor()
c.execute("CREATE TABLE Places (id INTEGER PRIMARY KEY, name TEXT)")
toBeAdded = [0]*1000
i = 0
while i < 1000:
toBeAdded[i] = ("P"+str(i+1))
i += 1
c.executemany("INSERT INTO Places(name) VALUES (?)",[toBeAdded])
我也尝试了最后一条命令的不同形式,但没有成功。这是我在 Google 上找到的唯一方法。
您已向 executemany
提供了一个平面列表。相反,该方法需要一个嵌套结构,每个内部序列代表一组要添加到查询中的参数。
因此,您希望 ['P0', 'P1', 'P2', ...]
成为 [['P0'], ['P1'], ['P2'], ...]
。您可以通过在创建列表时添加方括号来解决此问题,使其嵌套:
toBeAdded = [0]*1000
i = 0
while i < 1000:
toBeAdded[i] = [("P"+str(i+1))] # Note the surrounding square brackets
i += 1
补充反馈
生成数据的更好方法是使用 for
循环并摆脱 while
循环 - 您有预先确定的迭代次数要执行,所以它是惯用的使用 for
。您也不需要事先初始化列表。
to_be_added = []
for i in range(1000):
to_be_added.append([("P"+str(i+1))])
或者,使用列表理解:
to_be_added = [[("P"+str(x+1))] for x in range(1000)]
您会注意到我已经从变量名中删除了驼峰命名;这符合 Python 风格指南 - PEP8