Я видел этот пример кода из pg-promise
документации:
const obj = {
one: 1,
two: 2
};
db.query('INSERT INTO table(${this:name}) VALUES(${this:csv})', obj);
//=> INSERT INTO table("one","two") VALUES(1, 2)
Я пытаюсь сделать что-то подобное, вот MWE:
var insertObj = {rating_text: 'Example goes here!',
pros: 'Example pro',
cons: 'Example con',
stars: '5',
product_id: '20',
account_id: '1'}
var insertObj['rating_date'] = Date.now()
console.log(insertObj)
console.log(pgp.as.format('INSERT INTO product_rating(${this:name}) VALUES(${this:csv})', insertObj))
db.none('INSERT INTO product_rating(${this:name}) VALUES(${this:csv})', insertObj)
Я использую pgp.as.format
для просмотра SQL, передаваемого в postgres. Результат вышеизложенного:
{rating_text: 'Example goes here!',
pros: 'Example pro',
cons: 'Example con',
stars: '5',
product_id: '20',
account_id: '1',
rating_date: 1520886741488}
INSERT INTO product_rating("rating_text",
"pros",
"cons",
"stars",
"product_id",
"account_id",
"rating_date") VALUES('{"rating_text":"Example goes here!",
"pros" :"Example pro",
"cons" :"Example con",
"stars" :"5",
"product_id" :"20",
"account_id" :"1",
"rating_date":1520886741488}')
Я отформатировал SQL для удобства чтения.
Очевидно, что этот SQL-код не работает, поскольку весь объект представлен как одна строка и возвращает ошибку:
UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): error: INSERT has more target columns than expressions
Я ожидал, что VALUES()
будет отформатирован как в документации.
Почему пример документации не работает в моем MWE? Это из-за замены функций db.query
-> db.none
?