You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQLite插入数据遇sqlite3.OperationalError:1 values for 3 columns错误求助

修复SQLite插入数据的报错问题

我来帮你把这些问题一个个理清楚,快速解决这个报错:

核心错误点拆解

  1. 错误嵌套execute调用
    你在cur.execute里又嵌套了一层cur.execute,这是完全多余的,直接调用一次cur.execute就够了。

  2. 占位符被错误包裹单引号
    SQLite的参数化查询中,?是占位符,不需要用单引号括起来。你写成VALUES ('?,?,?')时,数据库会把整个'?,?,?'当作一个字符串值,自然会报“1个值对应3列”的错误。

  3. 参数传递错用了字符串字面量
    你传入的是('item','quantity','price')这三个固定字符串,而不是函数参数里的item, quantity, price变量,等于你根本没用到调用函数时传入的"Cup",4,5。

  4. 代码笔误
    最后调用插入函数时写了impo insert("Cup", 4, 5),这里的impo是多余的,直接调用函数即可。

修正后的完整代码

import sqlite3

conn = sqlite3.connect('lite.db')
cur = conn.cursor()
cur.execute('CREATE TABLE IF NOT EXISTS store(item TEXT, quantity INTEGER, price REAL)')
conn.commit()

def insert(item, quantity, price):
    conn = sqlite3.connect('lite.db')
    cur = conn.cursor()
    # 修正:移除嵌套的execute,去掉占位符的单引号,使用函数参数
    cur.execute("INSERT INTO store(item, quantity, price) VALUES (?,?,?)", (item, quantity, price))
    conn.commit()
    conn.close()

# 修正:去掉错误的impo前缀,直接调用函数
insert("Cup", 4, 5)

def view():
    conn = sqlite3.connect('lite.db')
    cur = conn.cursor()
    cur.execute("SELECT * FROM store")
    rows = cur.fetchall()
    conn.close()
    return rows

print(view())

额外优化建议

  • 可以考虑把数据库连接的逻辑封装一下,避免重复写connect和close,比如用上下文管理器with来自动管理连接,这样更简洁也不容易忘记关闭连接:
def insert(item, quantity, price):
    with sqlite3.connect('lite.db') as conn:
        cur = conn.cursor()
        cur.execute("INSERT INTO store(item, quantity, price) VALUES (?,?,?)", (item, quantity, price))
        # 使用with的话,不需要手动commit和close,会自动处理

内容的提问来源于stack exchange,提问作者Aryan Basle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:27:55