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

sqlite3.OperationalError: near "VALUES"语法错误排查求助

解决sqlite3.OperationalError: near "VALUES": syntax error

你的问题根源非常明确——INSERT语句里错误地重复了VALUES关键字,这直接违反了SQL的语法规则。让我们一步步拆解问题并修复:

错误代码的核心问题

看你写的INSERT语句:

c.execute("INSERT INTO userInfo VALUES(username, password, authority, name, surname, idnum) " 
         "VALUES(?, ?, ?, ?, ?, ?)", 
         (username, password, authority, name, surname, idnum))

这里你犯了两个小错误:

  1. 重复写了两次VALUES关键字,SQLite解析器无法识别这种语法;
  2. 第一次VALUES里直接写变量名的方式,在参数化查询中是无效的,应该统一用占位符?。

修正后的正确代码

推荐使用指定列名+参数化占位符的写法(更清晰,且后续表结构调整时不容易出错):

# 获取用户输入
username = input("Username: ")
password = input("Password: ")
authority = input("Authority level (1 or 2): ")
name = input("Name : ")
surname = input("Surname : ")
idnum = input("Identity Number: ")

# 确保你已初始化连接和游标(比如:conn = sqlite3.connect('users.db'), c = conn.cursor())
# 创建表(这部分逻辑没问题,保持即可)
c.execute("""CREATE TABLE IF NOT EXISTS userInfo(
    username TEXT, 
    password TEXT, 
    authority TEXT, 
    name TEXT, 
    surname TEXT, 
    idnum TEXT
)""")

# 修正后的INSERT语句:仅保留一次VALUES,用占位符绑定变量
c.execute("""INSERT INTO userInfo(
    username, password, authority, name, surname, idnum
) VALUES(?, ?, ?, ?, ?, ?)""", 
(username, password, authority, name, surname, idnum))

# 提交事务并关闭连接(务必添加,避免数据未写入数据库)
conn.commit()
conn.close()

如果想简化写法(不指定列名),也可以这样写,但要求传入值的顺序必须和表定义的列顺序完全一致:

c.execute("INSERT INTO userInfo VALUES(?, ?, ?, ?, ?, ?)", 
(username, password, authority, name, surname, idnum))

额外的优化建议

  • 输入验证:针对authority要求是1或2的规则,可添加简单校验避免无效数据:
    while authority not in ["1", "2"]:
        authority = input("Authority level must be 1 or 2, please re-enter: ")
    
  • 密码安全:永远不要明文存储密码!可以用hashlib或bcrypt对密码哈希后再存入,示例:
    import hashlib
    password_hash = hashlib.sha256(password.encode()).hexdigest()
    # 后续存入password_hash而非原始密码
    

修改后运行代码,就能正常将数据写入users.db了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:00:45