如何修复Python异常sqlite3 OperationalError?表历史记录有3列,但提供了4个值

ctrmrzij  于 2023-06-25  发布在  Python
关注(0)|答案(1)|浏览(157)

你好,我一直在尝试修复sqlite3数据库中的python OperationalError问题。我使用问号作为插入语句的占位符。但我收到了下面的信息。

db.execute("UPDATE accounts SET balance = ? WHERE (name = ?);", (new_balance, self.name))

db.execute("INSERT INTO history VALUES(?, ?, ?, ?);", (deposit_time, self.name, amount, picked_zone))
sqlite3.OperationalError: table history has 3 columns but 4 values were supplied.

我查看了代码,并尝试删除右侧括号中的一项。我得到了同样的信息。
我验证了插入语句的语法。我已经查找了一些解决方案,我已经尝试过,但他们没有与我的版本工作。如下所示。

sql = ''' INSERT INTO tasks(name,priority,status_id,project_id,begin_date,end_date)
              VALUES(?,?,?,?,?,?) '''

我颠倒了价值观参数。没成功我试着用三重引号。这一招没用。我不知道如何解决这个问题。[enter image description here](https://i.stack.imgur.com/PEOfC.png

ig9co6j1

ig9co6j11#

看起来你的历史表只有3列,但你试图把四个数据内容放进去。我想看看历史表和它的列。你可以在terminal或python中使用sqlite3检查表中的列,方法是执行以下命令:

pragma table_info(history);

SELECT * FROM history limit 1;

根据错误消息判断,这两个命令都将显示历史表只有三列。要解决这个问题,您必须重新创建历史表,使其包含所需的所有列,或者插入适当数量的列。
在代码中使这一点更清楚的一种方法是指定要插入的列。

INSERT INTO history (column1,column2 ,..) (...)

相关问题