如何获得返回的ID
Golang-1.18.1,PostgreSQL-12
...
var fk = []int{11, 22}
var img = []string{"a", "b"}
var prim = []string{"a1", "b1"}
err = conn.QueryRow(context.Background(),
"INSERT INTO tb (fk, img, prim) VALUES($1,$2,$3),($4,$5,$6)", fk[0],img[0],prim[0],fk[1],img[1],prim[1]).Scan(&fk[0],&img[0],&prim[0])
...
so it works, insert two records.
How to get returning id
1. if inserting one record
2. or inserting multiple
...
? something like:
var idx []int
err = conn.QueryRow(context.Background(),
"WITH ins AS (INSERT INTO tb (fk, img, prim) VALUES($1,$2,$3),($4,$5,$6) RETURNING id) SELECT array_agg(id) INTO idx FROM ins", fk[0],img[0],prim[0],fk[1],img[1],prim[1]).Scan(&fk[0],&img[0],&prim[0])
TB有字段:ID,FK,IMG,PRIM 插入tb(fk,img,prim)值(...)返回ID中的IDX 在我的pgx _“ github.com/jackc/pgx/v4”
upd1
**conn.Query**
var fk = []int{11, 22}
var img = []string{"a1", "b1"}
var prim = []string{"a2", "b2"}
rows, err := conn.Query(context.Background(),"INSERT INTO tb (fk,img,prim) VALUES($1,$2,$3),($4,$5,$6) RETURNING id", fk[0],img[0],prim[0],fk[1],img[1],prim[1])
var idx []int
for rows.Next() {
var id int
rows.Scan(&id)
idx = append(idx, id)
}
fmt.Println("idx: ", idx)
**conn.QueryRow**
// works for inserting a single record, but only without a prepared state
var id int
err = conn.QueryRow(context.Background(), "INSERT INTO tb (fk,img,prim) VALUES (11,'aa','bb') RETURNING id").Scan(&id)
fmt.Println("idx: ", id)
// don`t work RETURNING with prepared state, but inserting:
err = conn.QueryRow(context.Background(), "INSERT INTO tb (fk,img,prim) VALUES($1,$2,$3) RETURNING id", fk[0],img[0],prim[0]).Scan(&id,&fk[0],&img[0],&prim[0])
conn。
Conn.Queryrow用于插入单个记录,但仅没有准备的状态。
golang-1.18.1, postgresql-12
...
var fk = []int{11, 22}
var img = []string{"a", "b"}
var prim = []string{"a1", "b1"}
err = conn.QueryRow(context.Background(),
"INSERT INTO tb (fk, img, prim) VALUES($1,$2,$3),($4,$5,$6)", fk[0],img[0],prim[0],fk[1],img[1],prim[1]).Scan(&fk[0],&img[0],&prim[0])
...
so it works, insert two records.
How to get returning id
1. if inserting one record
2. or inserting multiple
...
? something like:
var idx []int
err = conn.QueryRow(context.Background(),
"WITH ins AS (INSERT INTO tb (fk, img, prim) VALUES($1,$2,$3),($4,$5,$6) RETURNING id) SELECT array_agg(id) INTO idx FROM ins", fk[0],img[0],prim[0],fk[1],img[1],prim[1]).Scan(&fk[0],&img[0],&prim[0])
tb has fields: id, fk, img, prim
insert into tb (fk, img, prim) values(...) returning id into idx
does not work in my pgx _"github.com/jackc/pgx/v4"
UPD1
**conn.Query**
var fk = []int{11, 22}
var img = []string{"a1", "b1"}
var prim = []string{"a2", "b2"}
rows, err := conn.Query(context.Background(),"INSERT INTO tb (fk,img,prim) VALUES($1,$2,$3),($4,$5,$6) RETURNING id", fk[0],img[0],prim[0],fk[1],img[1],prim[1])
var idx []int
for rows.Next() {
var id int
rows.Scan(&id)
idx = append(idx, id)
}
fmt.Println("idx: ", idx)
**conn.QueryRow**
// works for inserting a single record, but only without a prepared state
var id int
err = conn.QueryRow(context.Background(), "INSERT INTO tb (fk,img,prim) VALUES (11,'aa','bb') RETURNING id").Scan(&id)
fmt.Println("idx: ", id)
// don`t work RETURNING with prepared state, but inserting:
err = conn.QueryRow(context.Background(), "INSERT INTO tb (fk,img,prim) VALUES($1,$2,$3) RETURNING id", fk[0],img[0],prim[0]).Scan(&id,&fk[0],&img[0],&prim[0])
conn.Query works for inserts SINGLE and MULTY records with prepared state and RETURNING.
conn.QueryRow works for inserting a single record, but only without a prepared state.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论