pg-promise helpers.update 不工作

pg-promise helpers.update not working

我无法使用 helpers.update 方法。我几乎 100% 肯定这是我忽略的简单事情。 下面是代码中涉及的table中的列:

下面是我对 ColumnSet 的定义。 (请注意,我添加了一些不在我的实际代码中的间距。我只是讨厌滚动那些 windows。)

const usersSocialProfiles = new pgp.helpers.ColumnSet(
  [ 
    'user_id', 
    'user_social_profile_platform',
    'user_social_profile_link'
  ],
  {table: 'users_social_profiles'}
);
const usersSocialProfilesUpdate = new pgp.helpers.ColumnSet(
  [ 
    '?user_social_profile_id',
    '?user_id',
    'user_social_profile_platform',
    'user_social_profile_link'
  ],
  {table:'users_social_profiles'}
);

然后是一个在我想使用ColumnSet之间切换的函数

var pgpConstantSet = function(setName){
  if(setName === "usersSocialProfiles")
  {
    return usersSocialProfiles; 
  }
  if(setName === "updateUsersSocialProfiles")
  {
    return usersSocialProfilesUpdate;
  }
}

尝试使用ColumnSet

  var profiles = await pgp.helpers.update(userData.socialProfiles, 
  pgConstantSet("usersSocialProfiles"))+ 
  " WHERE t.user_social_profile_id=v.user_social_profile_id";
  console.log(profiles);

  return res.status(201).end();

以及 console.log(profiles) 打印的内容

UPDATE "users_social_profiles" AS "t" SET "user_id"="v"."user_id","user_social_profile_platform"="v"."user_social_profile_platform","user_social_profile_link"="v"."user_social_profile_link" FROM (VALUES(51,'facebook','http:/w.sefvfaboklink.com')) AS "v"("user_id","user_social_profile_platform","user_social_profile_link") WHERE t.user_social_profile_id=v.user_social_profile_id PATCH /api/users 201 55.858 ms - -

我应该注意到,我使用了我为插入定义的另一个 ColumnSet,效果非常好。我真的很感谢来到这里的任何人。我知道这有点乱。

helpers 命名空间中的所有类型和方法都用于生成查询,您将其混淆以执行它们。

在您的代码中,您只生成查询,但从不执行它。您应该在 helpers.update 调用之前删除 await,因为查询生成是同步的,并使用 Database 方法之一来执行查询。后者是异步的 ;)


另一方面,您的示例声明 usersSocialProfilesUpdate:

的更好方法
const usersSocialProfilesUpdate = usersSocialProfiles.merge([
    '?user_social_profile_id',
    '?user_id'
  ]);

查看有助于避免重复声明相同列的方法merge and extend