1 回答
TA贡献1810条经验 获得超4个赞
executemany首先,当您想将多行插入单个表时,您不需要使用它。您所拥有的只是代表单行的多个值。对 SQL 语句中的值使用占位符,并将元组作为第二个参数传递给execute.
cur.execute('INSERT INTO keys (id, file, type, date_time, attempts) VALUES (?, ?, ?, ?, ?)', (id, file, type, date_time, "0"))
奖励答案(executemany 案例)
现在,当您想在同一个表中插入多行时,您将使用该cursor.executemany方法。这需要 2 个参数,就像您在上面的错误中发现的那样:
一个字符串,代表 SQL 查询
参数集合,其中每个参数是代表一行的值列表
对集合中的所有参数执行 sql 查询。
两者的工作示例execute,executemany可以粘贴到 Python 文件中并运行
import sqlite3
conn = sqlite3.connect(':memory:')
cursor = conn.cursor()
cursor.execute('CREATE TABLE person (first_name text, last_name text, age integer)')
cursor.execute('SELECT * FROM person')
print(cursor.fetchall()) # outputs []
first_name, last_name, age = 'Carl', 'Cox', 47
cursor.execute('INSERT INTO person (first_name, last_name, age) VALUES (?, ?, ?)', (first_name, last_name, age))
cursor.execute('SELECT * FROM person')
print(cursor.fetchall()) # outputs [('Carl', 'Cox', 47)]
many_values = [
('Boris', 'Brejcha', 37),
('Mladen', 'Solomun', 43),
]
cursor.executemany('INSERT INTO person (first_name, last_name, age) VALUES (?, ?, ?)', many_values)
cursor.execute('SELECT * FROM person')
print(cursor.fetchall()) # outputs [('Carl', 'Cox', 47), ('Boris', 'Brejcha', 37), ('Mladen', 'Solomun', 43)]
conn.close()
因此,您会看到executemany该方法仅采用 2 个参数,但第二个参数是一个序列序列。
添加回答
举报