Knex.js:创建表并插入数据

时间:2016-01-29 16:38:39

标签: node.js knex.js

鉴于我有一个像这样的Knex.js脚本:

exports.up = function(knex, Promise) {
    return knex.schema.createTable('persons', function(table) {
        table.increments('id').primary();
        table.string('name').notNullable();
    });
};

目前正在创建一个表格。

如何将后续插入语句添加到此脚本?

我想要做的是添加像这样(或类似)的行:

knex.insert({id: 1, name: 'Test'}).into('persons')

我不确定我理解这种基于承诺的方法是如何运作的。我应该用insert语句编写另一个脚本吗?或者我可以以某种方式将它们附加到我现有的脚本中吗?

不幸的是,我在Knex.js文档中找不到任何完整的create + insert示例。

2 个答案:

答案 0 :(得分:18)

为什么不使用Promise then 方法,例如:

Occurrence

答案 1 :(得分:1)

then 方法返回一个 Promise,您可以在创建表后使用它来实现插入。例如:

exports.up = (knex) => {
    return knex.schema
        .createTable("payment_paypal_status", (table) => {
            table.increments()
            table.string("name")
            table.string("description")
        })
        .then(() =>
            knex("payment_paypal_status").insert([
                {name: "A", description: "A"},
                {name: "B", description: "BB"},
                {name: "C", description: "CCC"},
                {name: "D", description: "DDDD"},
            ])
        )
}

exports.down = (knex) => {
    return knex.schema.dropTableIfExists("payment_paypal_status")
}

PS.:

<块引用>

由于 .createTableIfNotExists 实际上只是生成简单的“CREATE TABLE IF NOT EXIST...”查询,如果之后为列生成任何更改表查询,它将无法正常工作。为了不破坏旧的迁移,此功能暂时未受影响,但不应在编写新代码时使用它,并且已从文档中删除。

我使用了 Fareed Alnamrouti 示例/代码并按照建议丢弃了 Jonny RathbonePromise.All