news 2026/9/11 11:57:09

Duix-Avatar 报 SQLite3 can only bind 类型错误?先查 voice_id

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Duix-Avatar 报 SQLite3 can only bind 类型错误?先查 voice_id

Duix-Avatar 报 SQLite3 can only bind 类型错误?先查 voice_id

【免费下载链接】Duix-Avatar🚀 Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning.项目地址: https://gitcode.com/GitHub_Trending/he/Duix-Avatar

关键词:核心词SQLite3 can only bind;长尾词:Duix-Avatar 数字人报错、better-sqlite3 绑定类型错误、创建模特失败排查、voice_id 插入数据库报错、biz.db 数据文件处理

在 Duix-Avatar(数字人克隆工具)里新建模特时,后台日志突然冒出SQLite3 can only bind numbers, strings, bigints, buffers, and null,界面卡在模型创建环节。这是新手最常撞上的一个坑:不是你的环境坏了,而是有个非法值被写进了数据库。

现象:新建模特时报类型绑定错误

触发路径很固定:创建模特 → 系统训练音色 → 报错。日志里能抓到类似这行:

SqliteError: SQLite3 can only bind numbers, strings, bigints, buffers, and null

关键信息是绑定时炸了,不是建表、也不是查询。项目用的数据库封装在 src/main/db/,数据落在应用 userData 目录下的biz.db文件里。

定位:谁把 false 塞进了 voice_id

顺着报错往回追,链路是这样的:

  1. 新建模特时,主进程先调 TTS 服务训练音色,入口在 src/main/service/voice.js 的train()
  2. 训练失败时(比如 TTS 服务没起来),train()直接return false
  3. 这个false被当成voiceId一路传进 src/main/dao/f2f-model.js,执行INSERT INTO f2f_model ...时绑定到voice_id字段。

SQLite 的绑定层只认数字、字符串、bigint、Buffer 和 null,布尔值不在白名单里,于是当场报错。

类比一下:数据库是个只收"整数票据"的窗口,代码递了张"假/真"的小纸条,窗口直接拒收。根因其实不在数据库,而在上游把失败结果当成成功 ID 往下传了——false本应代表"训练没成功,别插库了"。

修复:按改动量从小到大三种做法

1️⃣ 不动代码:先让 TTS 服务正常(改动量为零)

这个报错本质是"音色训练失败"的副作用。先确认127.0.0.1:18180的 TTS 服务和8383的 face2face 服务都已启动(对应 src/main/config/config.js 里的serviceUrl)。服务正常后重新创建模特,train()返回真实 ID,报错自然消失。

2️⃣ 最小改动:在 train() 失败时抛出异常

voice.jstrain()里,把return false改成throw new Error('音色训练失败')f2f_model就不会被写入脏数据,界面也能明确提示失败原因,而不是一个晦涩的 SQL 报错。

3️⃣ 加一道防线:入库前校验 voiceId

在 src/main/dao/f2f-model.js 的insert()入口加一行判断:

if (typeof voiceId !== 'number') throw new Error('voiceId 必须是数字')

这样任何非法值都会在写库前被拦下,报错指向具体字段,排查不用再猜。

替代方案:直接重置 biz.db

如果biz.db已经写进了脏记录导致列表页也异常,最省事的替代方案是关掉应用后删除该biz.db文件再重启——启动时initDB()会按 src/main/db/sql.js 自动重建全部表结构。

适用条件:模特素材本来就存在磁盘上(duix_avatar_data目录),你只是需要重跑一次创建;不适用于想保留历史视频记录的场景,删库等于清空本地记录。

避坑提示

  • 看到 bind 类报错,先想"哪个字段收到了异常值",而不是怀疑数据库本身;
  • 服务间调用的返回值(ID、路径)入库前务必做类型断言,false/undefined是惯犯;
  • 日志里搜[SQL Run](项目封装了 SQL 日志),能直接看到出错语句和参数,定位快得多;
  • 上游失败要"快速失败",把错误抛在业务层,别让脏值漏到数据层。

【免费下载链接】Duix-Avatar🚀 Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning.项目地址: https://gitcode.com/GitHub_Trending/he/Duix-Avatar

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 11:55:35

ESP32与FPGA驱动CYW240128图形点阵屏踩坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 11:52:54

轻羽大师:基于OCR与事件驱动的Windows桌面自动化引擎

1. 这不是“又一个定时工具”——轻羽大师的本质是一套面向Windows桌面场景的智能任务调度引擎 你搜“轻羽大师”,首页跳出的大多是“免费定时关机软件”“自动点击小工具”这类描述。但如果你真把它当成Windows自带任务计划程序(Task Scheduler&#x…

作者头像 李华
网站建设 2026/9/11 11:51:46

SCI期刊晋升1区TOP与版面费变革分析

1. 学术期刊动态:从2区晋升1区TOP的变革分析 最近学术圈流传着一个值得关注的现象:某知名期刊从SCI二区跃升为一区TOP期刊后,突然宣布将从2026年开始收取版面费。这个消息在科研人员中引发了广泛讨论,也折射出当前学术出版生态的某…

作者头像 李华
网站建设 2026/9/11 11:51:13

Django实战:社区爱心养老图书借阅管理系统开发详解

去年我在帮社区服务中心做内部管理系统时,接到一个特别的需求:社区里有一批退休老人,平时喜欢到活动室借书看,但原来的登记方式还是手工记在一个本子上。谁借了什么书、什么时候该还、哪些书被借走很久没回来,全靠管理…

作者头像 李华
网站建设 2026/9/11 11:46:59

Redis内存管理优化与生产环境配置实践

1. Redis内存管理基础认知Redis作为内存数据库,其性能表现与内存配置直接相关。内存不足会导致频繁的磁盘交换,而过度分配又会造成资源浪费。我在生产环境中曾遇到一个典型案例:某电商平台大促期间因未合理设置内存上限,导致Redis…

作者头像 李华