【问题标题】:How does knex handle default values in SQLite?knex 如何处理 SQLite 中的默认值?
【发布时间】:2016-12-08 02:18:16
【问题描述】:

我们目前使用 mysql / knex,并且我将 SQLite 添加为用于测试目的的数据库。我来了

Knex:warning - sqlite 不支持插入默认值。设置useNullAsDefault 标志以隐藏此警告。 (参见文档http://knexjs.org/#Builder-insert)。

Knex 如何处理默认值?它只是删除任何默认值,还是在插入后添加默认值,如下UPDATE 语句?

我不想改变我们所有的代码库(换掉所有的默认值),试图做最小的改变,让我可以在我们的测试中运行 SQLite...担心这会引入错误。

【问题讨论】:

    标签: sql sqlite knex.js


    【解决方案1】:

    我正在学习knex.js,所以我可以在涉及 PostgreSQL 的项目中使用它。在试用 Sqlite 时,我遇到了这个问题。

    原来是documented!

    如果有人希望将未定义的键替换为NULL 而不是DEFAULT,则可以在 knex 配置中提供useNullAsDefault 配置参数。

    他们给出了这个代码:

    var knex = require('knex')({
      client: 'sqlite3',
      connection: {
         filename: "./mydb.sqlite"
      },
      useNullAsDefault: true
    });
    
    knex('coords').insert([{x: 20}, {y: 30}, {x: 10, y: 20}])
    // insert into `coords` (`x`, `y`) values (20, NULL), (NULL, 30), (10, 20)"
    

    这为我删除了警告消息。

    【讨论】:

    • 请注意sqlite 客户端只需要filename 属性而不是host/user/password/database,如您的代码 sn-p 所示。
    • 谢谢@cyanbeam 我不知道我是怎么错过的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    相关资源
    最近更新 更多