使用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
相关产品推荐
相关产品推荐

