已解决:Python中executemany()方法参数数量错误的问题
在Python的数据库编程中,executemany()方法是一个常用的方法,用于执行多条SQL语句,其中每条语句的参数可能不同。然而,有时候开发者在调用executemany()方法时可能会遇到TypeError: executemany() takes exactly 2 positional arguments (3 given)这样的错误,这意味着方法接收到的位置参数数量不正确。
假设我们有一个SQLite数据库连接,并尝试使用executemany()方法插入多条数据,但错误地传递了多余的参数:
import sqlite3
# 连接到SQLite数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 创建表格(如果尚未存在)
cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
# 准备要插入的数据
data = [
(1, 'Alice', 30),
(2, 'Bob', 25),
(3, 'Charlie', 35)
]
# 错误地调用executemany方法,传递了多余的参数
cursor.executemany('INSERT INTO users (id, name, age) VALUES (?, ?, ?)', data, '多余的参数') # 错误
# 提交事务并关闭连接
conn.commit()
conn.close()
在上面的代码中,executemany()方法被错误地传递了三个位置参数,而它实际上只接受两个:SQL语句和参数列表。
正确的调用方式应该只包含SQL语句和参数列表两个参数:
import sqlite3
# 连接到SQLite数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 创建表格(如果尚未存在)
cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
# 准备要插入的数据
data = [
(1, 'Alice', 30),
(2, 'Bob', 25),
(3, 'Charlie', 35)
]
# 正确调用executemany方法,只传递SQL语句和参数列表
cursor.executemany('INSERT INTO users (id, name, age) VALUES (?, ?, ?)', data) # 正确
# 提交事务并关闭连接
conn.commit()
conn.close()
在这个修正后的示例中,executemany()方法只接收了两个参数:一个SQL语句字符串和一个包含多个元组的列表,每个元组代表一条SQL语句的参数。