Python操作sqlite3调用cursor.execute报最多2个参数却传4个错误如何解决
问题原因
sqlite3.Cursor.execute()方法最多仅支持接收2个位置参数:第一个为待执行的SQL语句,第二个是存放所有绑定参数的序列(元组/列表)或字典对象,不支持将多个绑定参数拆分为独立的位置参数传递。
你当前的代码把playe、leve、balance3个变量作为3个独立的位置参数传入,加上SQL语句总共传入了4个参数,超出方法的参数数量限制,因此触发TypeError: function takes at most 2 arguments (4 given)报错。
同时你当前的传入参数顺序和建表时的字段顺序不匹配:建表字段顺序为name、cash、level,你传入的参数顺序为name、level、cash,若不调整会导致字段值插入错位。
修正方案
将所有绑定参数放到元组/列表中作为第二个参数传入,同时调整参数顺序和表字段对应,插入完成后需要调用commit提交事务,否则数据不会持久化存储到数据库。
修正后完整代码
import sqlite3 connect = sqlite3.connect("Stats.db") cursor = connect.cursor() cursor.execute("""CREATE TABLE IF NOT EXISTS player( name TEXT, cash INT, level INT )""") connect.commit() playe = input("Name: ") balance = 10 leve = 0 # 绑定参数放入元组,调整顺序和表字段对应 cursor.execute("INSERT INTO player VALUES(?,?,?);", (playe, balance, leve)) # 提交插入事务 connect.commit() # 操作完成关闭数据库连接 connect.close()
如果你不想调整参数顺序,也可以在SQL语句中显式指定插入字段:
cursor.execute("INSERT INTO player (name, level, cash) VALUES(?,?,?);", (playe, leve, balance))
内容的提问来源于stack exchange,提问作者FiolDoll
相关产品推荐
相关产品推荐

