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

Drizzle迁移创建视图失败,op-sqlite查询提示视图不存在

Drizzle迁移创建视图失败,op-sqlite查询提示视图不存在

这种问题我之前在Drizzle + op-sqlite的React Native项目里也踩过坑,咱们一步步拆解排查,应该能很快找到原因。

最可能的核心原因:SQL语法错误(strftime参数顺序搞反了)

你写的strftime(o.Date, '%d')是错误的!SQLite的strftime函数参数顺序是格式字符串在前,日期值在后,正确写法应该是strftime('%d', o.Date)。这个语法错误会导致创建视图的SQL执行失败,迁移过程中悄悄报错,最终视图根本没被创建出来。

你所有用到strftime的地方都要修正:

  • 把strftime(o.Date, '%d')改成strftime('%d', o.Date)
  • strftime(o.Date, '%m') → strftime('%m', o.Date)
  • strftime(o.Date, '%Y') → strftime('%Y', o.Date)
  • FundEntries部分的strftime也要做同样的修正

其他需要排查的点

1. 确认迁移是否真的执行成功

Drizzle会自动创建一个__drizzle_migrations表来记录已执行的迁移,你可以查询这个表,看看包含视图创建的迁移文件是否被标记为已完成。如果没找到对应的迁移记录,说明迁移根本没跑起来:

  • 检查React Native环境下op-sqlite的迁移执行逻辑,是不是用对了migrate()方法而不是db.push()?
  • 迁移执行时有没有加错误捕获?比如在代码里加try/catch,打印迁移的错误日志,很多时候迁移报错不会直接弹出来,得手动看日志。

2. 检查Drizzle对视图的迁移支持

虽然Drizzle支持视图定义,但有时候在特定适配器(比如op-sqlite)下,需要确保视图的创建语句被正确包含在迁移文件里:

  • 你是用drizzle-kit generate自动生成的迁移,还是手动写的?如果是自动生成的,确认Drizzle是否正确识别了你的视图定义并生成了对应的SQL。
  • 有没有可能迁移配置里排除了视图相关的代码?检查drizzle.config.ts里的设置。

3. 手动验证SQL正确性

把修正后的创建视图SQL复制到SQLite客户端(比如DB Browser for SQLite)里直接执行,看是否能成功创建视图。如果执行时报错,客户端会给出明确的错误提示,能帮你快速定位其他语法问题。

修复步骤总结

  1. 修正所有strftime的参数顺序,确保格式字符串在前,日期列在后;
  2. 更新迁移文件里的视图创建SQL(如果是自动生成的,重新跑drizzle-kit generate);
  3. 在React Native项目里重新执行迁移,同时加上错误捕获打印日志;
  4. 迁移完成后,用SQLite客户端检查数据库,确认OperationListItems视图是否存在。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:03:01