为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 golang 中运行返回已删除实体 ID 的删除查询

如何在 golang 中运行返回已删除实体 ID 的删除查询

Go
湖上湖 2022-12-19 10:55:55
询问 :DELETE FROM *tableName* RETURNING *id*如何在我的 golang 代码中运行这个查询?我试过resp, err := pgConnPool.Exec(context.Background(), deleteQuery)但它给出了 pgConn.CommandTag(可用于获取 rowsCount 但不是实际行)
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

查询没问题(只需确保它以 结尾RETURNING *id*)。


假设您只删除一个实体,您可以QueryRow按照@mkopriva 的建议使用


package yourpackage


import (

  "context"


  "github.com/google/uuid"

  "github.com/jackc/pgx/v4"

)


func YourMethod() {

  // ...


  var recordID uuid.UUID


  err := pgConnPool.QueryRow(context.Background(), deleteQuery).Scan(&recordID)

  if err != nil {

    // handle error.

  }


  // recordID now contains the id of the deleted record.

}

或者包裹在处理程序中


package yourpackage


import (

  "context"


  "github.com/google/uuid"

  "github.com/jackc/pgx/v4"

)


func DeleteRecord(/*your args*/) (uuid.UUID, error) {

  var recordID uuid.UUID


  // build your deleteQuery object.


  err := pgConnPool.QueryRow(context.Background(), deleteQuery).Scan(&recordID)


  return recordID, err

}

如果你想增加一次删除多条记录的可能性


package yourpackage


import (

  "context"


  "github.com/google/uuid"

  "github.com/jackc/pgx/v4"

)


func DeleteRecords(/*your args*/) ([]uuid.UUID, error) {

  var recordIDs []uuid.UUID


  // build your deleteQuery object.


  rows, err := pgConnPool.Query(context.Background(), deleteQuery)

  if err != nil {

    return nil, err

  }


  defer rows.Close()


  for rows.Next() {

    var recordID uuid.UUID


    if err := rows.Scan(&recordID); err != nil {

      return nil, err

    }


    recordIDs = append(recordIDs, recordID)

  }


  return recordIDs, rows.Err() // Ensure no reading error occurred  

}


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号