当前位置: 首页 > 知识库问答 >
问题:

如何获得行值(s)后db插入?

邬良才
2023-03-14

我使用Golang将数据插入到DB中,基本上我的查询如下所示

var cols = "(col1, col2, col3)"
var values = "($1, $2, $3)"
var query = fmt.Sprintf("INSERT INTO %s %s VALUES %s", myTable, cols, values)

res, err := db.Exec(query, thing.val1, thing.val2, thing.val3)

res中唯一可用的内容是lastInsertId和受影响的行的#。但我需要的是受影响的行。原因是我将数据插入到一个psql数据库中,该数据库有一个自动增量id列,所以我希望数据与此一起返回

例如,使用Java hibernate,我可以做这个答案解释的事情。我不需要在数据库中重新查询ID。

编辑:我试图使用lastInsertId方法,但出现了这个错误

此驱动程序不支持LastInsertId

共有2个答案

谭昊乾
2023-03-14

Postgres驱动程序不支持res. LastInsertId()。但是,MySQL驱动程序支持它。

db。Exec()不返回上次插入的id,而是返回db。QueryRow()

为了更好地理解,你可以参考这个链接。

在这里,我添加了一个可能对您有所帮助的示例。

var id int
err := db.QueryRow("INSERT INTO user (name) VALUES ('John') RETURNING id").Scan(&id)
if err != nil {
...
}
岳嘉石
2023-03-14

假设您只想要一个名为id的列中的自动递增值,这是一个带有pq驱动程序的插入

var cols = "(col1, col2, col3)"
var values = "($1, $2, $3)"
var query = fmt.Sprintf(
    "INSERT INTO %s %s VALUES %s RETURNING id",
    myTable, cols, values,
)
var id int
if err := db.QueryRow(
    query,
    thing.val1, thing.val2, thing.val3,
).Scan(&id); err != nil {
    panic(err)
}
fmt.Println("ID: ", id)

对于多个插入:

var cols = "(col1, col2, col3)"
var values = "($1, $2, $3),($4, $5, $6)"
var query = fmt.Sprintf(
    "INSERT INTO %s %s VALUES %s RETURNING id",
    myTable, cols, values,
)
var ids []int
rows, err := db.Query(
    query,
    thing.val1, thing.val2, thing.val3,
    thing.val4, thing.val5, thing.val6,
)
if err != nil {
    panic(err)
}
for rows.Next() {
    var id int
    if err := rows.Scan(&id); err != nil {
        panic(err)
    }
    ids = append(ids, id)
}
fmt.Println("IDs: ", ids)
 类似资料:
  • 问题内容: 我正在使用php中的分页进行搜索功能,下面是我的代码,但是每当我单击下一个链接时,搜索查询都不会采用通过POST传递的变量。你能帮我么.. 问题答案: 您的代码中有几个问题。 第一的: 您使用的变量不正确。您有,但您应该使用与变量相同的方式,如下所示: 第二: 您正在解释“发布”的概念,并错误地单击了链接。您需要使用下一个和上一个按钮进行的​​操作是一个隐藏的表单,其中包含您需要的所有

  • 问题内容: 如何从SELECT语句的上一个结果行中获取值 如果我们有一个名为cardevent的表,并且有[ID(int),Value(Money)]行,并且其中有一些行,例如 很快… 如何进行一个查询,以获取每个行的ID,值和前一个行值,数据在其中显示如下 很快。 那么,有人可以帮助我获得针对此类问题的最佳解决方案吗? 需要查询帮助 问题答案: 您将不得不将表与自身连接,我不确定这是否是100%

  • 我想上传一个CSV文件,该文件表示要以快速和原子的方式添加到我的Cosmos DB集合中的10k文档。我有一个类似以下伪代码的存储过程: 当我运行它时,存储过程在超时之前创建了大约1200个文档(因此回滚并不创建任何文档)。 以前,我使用延续标记在存储过程中成功更新(而不是创建)数千个文档,此答案作为指导:https://stackoverflow.com/a/34761098/277504。但是

  • 我插入数据到一个电子表格与新的谷歌工作表API v4,代码完美的工作和数据它是插入良好的工作表。 但是如何找出最后一行有数据来添加后面的数据呢? A1符号中有什么技巧吗? 我需要一个相当于。

  • 问题内容: 我执行INSERT INTO语句 我想获取主键。 我的表有2列: 我刚刚插入了这个,如何获得“ id”? 问题答案: 使用得到插入光标对象的最后一行ID,或者从该连接上最后插入获取的ID。

  • 问题内容: 我正在使用PHP中的mvc结构,我想检索最后插入的行ID。 我创建了以下sql代码: 但不幸的是我遇到了这个错误: 我也尝试过此堆栈链接,但不适用于我,因此如果您能帮助我获取ID,我将非常高兴。 我也在这里共享我的controller.php文件。 问题答案: 你快到了。 如果您查看lastInsertId的手册页,则会在数据库句柄上调用它- 您当前正在语句中对其进行调用。 您只需要致