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

使用SQLite插入行时如何仅传部分参数让其余字段用数据库默认值

SQLite插入时使用字段默认值的实现方案

推荐写法(优先使用)

最稳妥的方式是明确指定你要赋值的字段名,未被指定的字段会自动使用表定义的默认值填充,不需要手动声明DEFAULT。
你只需要修改执行插入的代码行即可:

# 括号内的字段名请替换为你users表中后4个字段的实际名称,和后面的参数顺序一一对应
cur.execute("INSERT INTO users (username, name, password, email) VALUES (?, ?, ?, ?)", (username, name, hexdex, email))

这种写法的优势是不受表字段顺序调整的影响,后续修改表结构也不容易触发插入错误。

原有写法的修复方案

如果你要沿用现在写全所有字段占位的写法,只需要去掉SQL语句中参数位多余的括号即可:

# 移除原来每个?外面包裹的括号
cur.execute("INSERT INTO users VALUES (DEFAULT, DEFAULT, DEFAULT, ?, ?, ?, ?)", (username, name, hexdex, email))

不推荐该写法,一旦后续表字段顺序调整,插入数据会发生错乱。

必要前置检查

确保你的users表定义时已经给前3个字段配置了默认值:

  • 自增id字段设置为INTEGER PRIMARY KEY AUTOINCREMENT即可自带默认自增属性
  • status、type字段需要显式配置DEFAULT约束,示例建表语句片段:
    CREATE TABLE users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        status INT DEFAULT 0,
        type INT DEFAULT 1,
        -- 后面是你剩下的4个字段定义
        username TEXT NOT NULL,
        name TEXT NOT NULL,
        password TEXT NOT NULL,
        email TEXT NOT NULL
    );
    

如果未配置默认值,插入时留空会触发约束报错。你可以执行cur.execute("PRAGMA table_info(users)")打印表结构,检查dflt_value列确认默认值配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:01