如何使用knex.raw()方法将对象插入PostgreSQL数据库?

时间:2018-11-20 04:53:04

标签: postgresql knex.js

我正在寻找一种使用knex.raw()方法将对象插入postgreSQL数据库中的方法。

这是我的尝试,它可以工作,但是我不知道这是否是最好的方法。

  const newLink = {
    url: 'http://github.com',
    name: 'GitHub',
    description: 'GitHub is awesome',
    rel: '',
    last_update: new Date()
  };
  const columns = Object.keys(newLink);
  const values = Object.values(newLink);
  console.log('columns: ', columns);
  console.log('values: ', values);
  const sql = `
    INSERT INTO link (${columns.map(col => col).join(',')})
    VALUES (${values.map(() => '?').join(',')})
  `;
  console.log('sql: ', sql);
  try {
    const insertObjResp = await knex.raw(sql, values);
    console.log('insertObjResp: ', insertObjResp);
  } catch (error) {
    console.error(error);
  }

knex给我这样的调试信息:

{ method: 'raw',
  sql: '\n    INSERT INTO link (url,name,description,rel,last_update)\n    VALUES (?,?,?,?,?)\n  ',
  bindings:
   [ 'http://github.com',
     'GitHub',
     'GitHub is awesome',
     '',
     2018-11-20T04:47:21.085Z ],
  options: {},
  __knexQueryUid: '304fb5e5-9864-4ec6-9a63-1051e8e3c9ad' }

是否有knex.js官方方式可以完成这项工作?谢谢。

1 个答案:

答案 0 :(得分:-1)

  

是否有knex.js官方方法来完成这项工作?谢谢。

官方方法是使用knex.insert()

您的代码似乎正确,没有更好的方法。值和knex.raw的数组使用起来有点不方便。当然,您至少应该将该怪物包装在辅助函数中。