【问题标题】:.returning() is not supported by sqlite3 and will not have any effect.returning() 不受 sqlite3 支持,不会有任何影响
【发布时间】:2019-09-15 19:25:51
【问题描述】:

最近,我注意到控制台中的黄色警告说,

.returning() 不受 sqlite3 支持,不会有任何效果。

我将sqlite3 模块与knex.js 一起使用。它没有对输出产生任何影响,但知道它有什么价值。这是我的环境详细信息。

knex v0.19.1
sqlite3 v4.0.9
节点 v10.16.9
electron- builder v21.2.0
electron v6.0.2

【问题讨论】:

标签: node.js electron knex.js electron-builder node-sqlite3


【解决方案1】:

在您的应用程序的某处调用了.returning(...)。由于您使用的是 sqlite3 方言,因此该调用将被忽略,并且不会对返回的数据产生任何影响。

例如:

await knex('table1').insert({ foo: 'bar' }).returning('*');

await knex('table1').insert({ foo: 'bar' });

将在 sqlite 方言上返回完全相同的内容。

【讨论】:

  • 如果应用中没有.returning?会不会是 knex 和 sqlite 的问题?
  • 不,这根本不是问题。它只是 Postgre SQL 和 oracle 以及一些其他数据库的一个特性,在 sqlite/mysql 中是不存在的。
  • 有没有办法屏蔽这条消息?!
  • 有几种方法可以摆脱它。您可以决定不将 .returning() 与 sqlite 一起使用,或者通过使用新的 .silentReturning() 方法扩展 knex,该方法首先检查使用的驱动程序,然后再决定是否应调用 .returning() 或通过覆盖配置中的记录器函数并识别/忽略那个警告。
【解决方案2】:

SQLite 从 3.35.0 (2021-03-12) 版本开始支持 RETURNING 语法。 https://sqlite.org/lang_returning.html

【讨论】:

  • 很好,我们需要将 sqlite 的版本开关添加到 knkex 配置中以开始支持它。
  • 我刚刚在最新版本 "sqlite3": "^5.0.2", "knex": "^0.95.11" 上尝试过,仍然收到警告和错误
猜你喜欢
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多