#SQLite
共 22 篇文章
SQLite WAL 报 SQLITE_BUSY_SNAPSHOT,增加 busy_timeout 为什么没用
核对517过期快照、完整事务重启与重新计算,评估读取前IMMEDIATE的占锁代价,保留游标边界。
SQLite INSERT SELECT 的 ON CONFLICT 报 near do:给 SELECT 保留 WHERE
SQLite INSERT SELECT 接 ON CONFLICT 报 near do 时,检查 ON 的解析歧义,在 SELECT 中保留 WHERE,并核对实际运行库和冲突语义。
SQLite 已设置 foreign_keys,删除父记录仍未触发级联删除
事务内的 PRAGMA foreign_keys 设置不会生效。核对实际写入连接的开关和外键定义,将初始化移到事务开始前,并单独检查历史孤儿记录。
Python sqlite3 查询不存在的双引号列名却返回 0
SQLite 启用双引号字符串兼容时,不存在的双引号列名可能变成字面值。核对表结构,在支持的 Python 连接接口中禁用 DQS_DML,并修正列引用和值参数。
SQLite SUM 已转为 BIGINT,仍报 integer overflow
SQLite BIGINT 不扩大 SUM 的整数累加范围。区分允许近似的 REAL 聚合与精确大整数求和,保留原始数值并核对空集合及中间溢出。
SQLite LIKE 搜索西里尔字母时忽略大小写失效
SQLite 内置 LIKE 和 upper() 默认只转换 ASCII,西里尔字母搜索可能漏匹配。用常量定位,在 Microsoft.Data.Sqlite 中注册专用转换函数,并核对连接、语言规则与通配符边界。
SQLite 原目录报 readonly,复制到其他目录却能写:检查目录权限与 UAC
SQLite 同一数据库换目录后能写,原位置却报 readonly,检查有效用户、目录及辅助文件权限,区分 UAC 诊断与长期修复。
Room 报迁移路径缺失:已写 Migration 仍失败,先检查实际 Builder
Room 提示迁移路径缺失,检查真正使用的数据库 Builder、版本路径和 schema 一致性,通过迁移测试保留旧记录,避免以删库或破坏性回退掩盖升级问题。
SQLite group_concat 去重并指定分隔符时报单参数错误
SQLite 的 group_concat 同时使用 DISTINCT 和自定义分隔符时报错。先按分组键和值去重,再执行双参数聚合,避免替换结果中的逗号破坏原始内容。
SQLite 查询后写入报 database is locked:检查未关闭的 DataReader
连接和 command 已关闭仍可能有读取路径未结束;检查 reader、显式事务及外部编辑,区分忙等待和 WAL 的能力边界。
SQLite 批量清理报 too many SQL variables:检查单条语句的参数上限
SQLite 清理积压数据时单条 IN 查询参数过多,读取实际连接限制,按参数预算和业务语义设计批次,保留删除、并发和恢复要求。
SQLite 建表报 AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY
SQLite 的 BIGINT 主键不能直接使用 AUTOINCREMENT。核对生成 SQL 的精确类型名,区分自动编号与不复用编号,并处理 ORM 映射和已有表迁移。
SQLite strftime 读取毫秒时间戳返回 NULL
SQLite 日期函数不会从 INTEGER 声明推断毫秒单位。确认原始单位后,在查询中换算成秒并紧跟 unixepoch,核对 UTC 年份、空值与历史数据。
SQLite 本地有表,部署后却报 no such table:核对实际数据库路径
SQLite 本地能查、部署后报 no such table 时,在失败连接核对完整数据库路径,区分 Django 配置和独立 sqlite3 连接,防止相对路径隐式创建空库。
Python sqlite3 executemany 执行 SELECT 报 ProgrammingError
区分批量 DML 与查询结果收集,改用逐项 execute 或绑定参数的 IN 查询,并核对重复项、顺序和空输入。
SQLAlchemy 内存 SQLite 已建表,请求却报 no such table:连接没有共享
内存 SQLite 已建表但 FastAPI TestClient 请求仍报 no such table 时,检查线程与连接范围;区分串行 StaticPool 和并发共享内存 URI,保留事务与数据生命周期限制。
SQLAlchemy 执行 VACUUM 报事务错误:先检查自定义 BEGIN 钩子
SQLite VACUUM 仍报事务错误时,核对自定义 BEGIN 钩子、驱动自动提交与维护连接的边界,避免裸 COMMIT 提前提交业务数据。
Python sqlite3 查询到记录,rowcount 仍返回 -1
区分 SELECT 的结果条数与修改行数,按存在判断、完整取数或总数统计选择读取方式,避免重复 fetchall 丢掉数据。
SQLite INSERT OR REPLACE 后关联子表数据被级联删除
唯一键冲突的 REPLACE 会删除旧父行,延迟外键检查不能保住子记录;改用保留父键的 UPSERT,并单独核对已提交的数据损失。


