← 返回资讯

用量表的整数列混进unknown,怎样在SQLite入库时拦住脏类型

2026-10-24

SQLite普通INTEGER列可能保留无法转成数字的文本。需要严格的用量入口时,可在支持的版本使用STRICT,并配合NOT NULL与范围约束;STRICT仍允许能无损转换的数字字符串,不能声称所有字符串都会被拒绝。

重现INTEGER列存文本

数据类型、缺失值和业务范围要分开定义。整数列回答如何存储,NOT NULL回答可否缺失,CHECK(n>=0)回答此类用量可否为负。把三者混为“强类型”容易漏掉NULL;而退款若本来需要负数,也不能直接套用这里的非负表设计。

定义缺失零值负值业务合同

同一批0、数字字符串12、unknown、NULL和负一分别进入普通表与严格表。程序打印typeof结果,数字字符串在严格表中成为整数12,后三种被本例约束拒绝。运行前明确检查SQLite至少3.37;Python解释器版本并不直接等于它链接的SQLite版本。

普通表在unknown输入下保存文本,是定位脏类型的直接证据;NULL与负数则分别测试缺失与范围,不应笼统记录成类型错误。迁移前可按typeof聚合现存数据,估算需要人工处理的值。测试报告要保留被拒输入与原因,避免把整个导入批次无声跳过以后只报告成功行数。

保留拒绝行供追查

已有脏数据不能靠改一条建表语句自动修好。实际迁移应先盘点值类型与拒绝原因,建立新表并校验搬迁结果,再按项目支持的流程切换。示例只创建内存假表,既不是New API的原生结构,也不是建议在线修改正在服务的数据库。

适用范围:SQLite>=3.37才运行STRICT;合成schema,不声称现有网关库可直接在线改表。

配套样本与复核入口

  • run.py:独立运行程序,包含合成输入、操作和正反例断言。
  • case.json:输入说明、预期任务与适用范围,便于保存和交接。
  • observed.json:本次实际执行输出;临时路径、进程号和计时可能随运行变化。

先观察输出的sqlite_version,再看每个输入在loose与strict中的实际值和typeof。数字字符串12被接收是本例必须保留的结果,unknown、NULL与负一则被不同约束挡住。若程序因版本断言停止,应升级实验环境或明确暂不支持,不能删除STRICT关键字以后仍把结果称为严格表测试。

Python3.8以上及标准库;实际链接的SQLite至少3.37。程序不读取现有网关数据库,全部样本写入内存或新建临时目录,执行完自动清理;没有任何模型API调用。

python -B run.py

阅读输出时,先按case.json中的任务逐项核对网关SQLite STRICT用量入库,再与observed.json比较。非零退出表示依赖或断言需要处理,应保留实际错误。

一手依据1(3.37起可按表启用STRICT;可无损转换的数字字符串仍可能被接收,不能误称完全不转换。)。

继续阅读:数据库完整性返回ok,渠道关联却找不到父记录,怎样区分物理检查和引用检查;批量导入渠道到第三行失败,怎样按既定策略保留成功项或整批回滚;网关用量和上游账单对不上,怎样做一份逐请求对账样本。

加微信,把这一页发到你手机上

扫码加站长企业微信,会自动把这一页的链接发给你。模型接入、token 计费上有问题,也可以直接问。

去留微信

不想自己搭网关、自己维护渠道?

力达云是托管的 OpenAI / Anthropic 双格式端点,一期提供 DeepSeek,注册送 ¥5 额度。

去试用

这个页面有问题?

提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。