如何 运行 golang 中的删除查询 returns 已删除实体的 id
How to run a delete query in golang that returns the id of deleted entity
查询:
DELETE FROM *tableName* RETURNING *id*
如何在我的 golang 代码中 运行 这个查询?
我试过了
resp, err := pgConnPool.Exec(context.Background(), deleteQuery)
但它给出 pgConn.CommandTag(可用于获取行数但不是实际行数)
查询正常(只要确保它以 RETURNING *id*
结尾)。
假设您只删除一个实体,您可以按照@mkopriva
的建议使用QueryRow
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
}
查询:
DELETE FROM *tableName* RETURNING *id*
如何在我的 golang 代码中 运行 这个查询? 我试过了
resp, err := pgConnPool.Exec(context.Background(), deleteQuery)
但它给出 pgConn.CommandTag(可用于获取行数但不是实际行数)
查询正常(只要确保它以 RETURNING *id*
结尾)。
假设您只删除一个实体,您可以按照@mkopriva
的建议使用QueryRow
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
}