为啥我不能使用 node-postgres 从数据库中删除?
Posted
技术标签:
【中文标题】为啥我不能使用 node-postgres 从数据库中删除?【英文标题】:Why can't I delete from db using node-postgres?为什么我不能使用 node-postgres 从数据库中删除? 【发布时间】:2015-05-03 12:28:13 【问题描述】:我需要对参数化查询做些什么特别的事情吗?
以下似乎成功了(我正在使用承诺化的client.query
见结尾),
console.log('cancel for', data);
var cancelInviteQuery = 'delete from friendship where user_1=$1 and user_2_canonical=$2';
return query(cancelInviteQuery, [data.id, data.friend])
.then(function (results)
console.log('ran delete frienship', results);
)
.catch(function (error)
console.error('failed to drop friendship', error);
);
因为我得到了输出:
cancel for "id":3,"friend":"m"
ran delete frienship []
但随后对数据库的以下查询显示该记录仍然存在
select * from friendship;
id | user_1 | user_2 | user_2_canonical | confirmed | ignored
----+--------+--------+------------------+-----------+---------
8 | 3 | 9 | m | f | f
然后当我直接针对数据库进行以下查询时(使用 psql 客户端)
delete from friendship where user_1=3 and user_2_canonical='m'
我的query
函数(node-postgres 的client.query
的包装器):
function query(sql, params)
var promise = new RSVP.Promise(function (resolve, reject)
pg.connect(CONNECTIONSTRING, function (error, client, done)
if (error) reject(error); return;
client.query(sql, params, function (error, result)
done(); // Greedy close.
if (error)
reject(error);
return;
else if (result.hasOwnProperty('rows'))
resolve(result.rows);
else resolve(result.rows);
);
);
);
return promise;
【问题讨论】:
您的data
变量有问题。在console.log
中显示的是"friend":"m"
,但您希望它是"friend":"mike"
。
对不起@victorkohl 这是一个草率的粘贴。
你解决了这个问题吗?如果不发送更多信息
我还没有解决它,但我仍然不知道提供什么。
【参考方案1】:
试试这个
var cancelInviteQuery = 'delete from friendship where user_1 IN ($1) and user_2_canonical IN ($2)';
【讨论】:
以上是关于为啥我不能使用 node-postgres 从数据库中删除?的主要内容,如果未能解决你的问题,请参考以下文章
使用 node-postgres 在 postgres 中存储文件