亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go Select In 使用 uuid 字符串列表

Go Select In 使用 uuid 字符串列表

Go
胡說叔叔 2021-12-27 15:35:10
我有一個 uuid 字符串列表,我想用它來過濾查詢。如果我像這樣循環遍歷列表中的元素,我可以使查詢工作:for i, fileUID := range fileUIDs {    db.Exec("DELETE FROM files WHERE uid = $1::uuid", fileUID)}但我想使用列表讓它工作:db.Exec("DELETE FROM files WHERE uid IN $1::uuid[]", fileUIDs)這可能嗎?我似乎無法讓它工作。我嘗試了如何使用 Golang 在 SQL 中執行 IN 查找中的解決方案?但我pq: syntax error at or near ","在使用普通?或pq: syntax error at or near "::"使用?:uuid. 我使用了以下內容:fileUIDArgs := make([]interface{}, len(fileUIDs))for i, fileUID := range fileUIDs {    fileUIDArgs[i] = interface{}(fileUID)}//also tried using "?::uuid"myPsql := "DELETE FROM files WHERE uid IN (" + "?" + strings.Repeat(",?", len(uidStrings)-1) + ")"db.Exec(myPsql, fileUIDArgs...)
查看完整描述

2 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

使用 fmt。確保您的 uuids 不包含任何SQL-injection。


ary := []string{

    "1442edc8-9e1f-4213-8622-5610cdd66790",

    "0506ca17-d254-40b3-9ef0-bca6d15ad49d",

    "e46f3708-6da5-4b82-9c92-f89394dffe5d",

    "fb8bf848-73a2-4253-9fa3-e9d5e16ef94a",

    "84691fa5-3391-4c02-9b16-82389331b7ac",

    "adba3c9d-b4ab-4e62-a650-414970645be7",

}

query := fmt.Sprintf(`DELETE FROM files WHERE uid IN ('%s'::uuid);`,

             strings.Join(ary, "'::uuid,'"))

db.Exec(query) // etc


擺脫潛在的 SQL 注入:


ary := []string{ /* list of uuids */ }

query := `DELETE FROM files WHERE uid IN (`

aryInterfaces := make([]interface{}, len(ary))

for i, v := range ary {

    query += "$" + strconv.FormatInt(int64(i+1), 10)

    if i < len(ary)-1 {

        query += ","

    }

    aryInterfaces[i] = v

}

query += ")"

db.Exec(query, aryInterface...)


獎勵 Postgresql 使用$1, $2, $3etc 而不是?, ?, ?. 這是一個小輔助函數,這是它的概念證明。


查看完整回答
反對 回復 2021-12-27
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

這是一個老問題,但為了將被引導到這里的人,如果您使用的是 postgres db,您可以使用這種更簡單的方法:


DELETE FROM files WHERE uid=ANY($1);


$1是一組 uuid。所以你的查詢變成:


toBeDeleted:= []uuid.UUID{....}

_, err = tx.Exec("UDELETE FROM files WHERE uid=ANY($1);",toBeDeleted)


//or


_, err = tx.Exec("UDELETE FROM files WHERE uid=ANY($1);",pq.Array(toBeDeleted))

要么應該為你工作。


查看完整回答
反對 回復 2021-12-27
  • 2 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號