第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何在 jackc/pgx 中使用“where id in”子句?

如何在 jackc/pgx 中使用“where id in”子句?

Go
白衣非少年 2023-06-19 13:51:34
pgx 是否為“where in”子句提供任何支持?我在另一個 stackoverflow 線程中發(fā)現(xiàn)應(yīng)該使用字符串連接來手動構(gòu)建查詢。IMO 這有點容易出錯,因為你必須自己處理轉(zhuǎn)義/sql 注入等。我也試著自己弄明白:const updatePurgedRecordingsStmt = "update recordings set status = 'DELETED', deleted = now() where status <> 'DELETED' and id in ($1);"func (r *Repository) DeleteRecordings() error {    pool, err := r.connPool()    if err != nil {        return errors.Wrap(err, "cannot establish connection")    }    pgRecIds := &pgtype.Int4Array{}    if err := pgRecIds.Set([]int32{int32(1), int32(2)}); err != nil {        return errors.Wrap(err, "id conversion failed")    }    if _, err = pool.Exec(updatePurgedRecordingsStmt, pgRecIds); err != nil {        return errors.Wrap(err, "update stmt failed")    }    return nil}但是,當(dāng)我執(zhí)行此代碼時,出現(xiàn)以下錯誤:錯誤:綁定參數(shù) 1 中的二進制數(shù)據(jù)格式不正確 (SQLSTATE 22P03)我使用的版本:郵政系統(tǒng):db=> SELECT version();                                              version----------------------------------------------------------------------------------------------------------- PostgreSQL 9.6.11 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-16), 64-bit(1 row)PGX:github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc=github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=github.com/jackc/pgx v3.3.0+incompatible h1:Wa90/+qsITBAPkAZjiByeIGHFcj3Ztu+VzrrIpHjL90=github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
查看完整描述

2 回答

?
呼喚遠方

TA貢獻1856條經(jīng)驗 獲得超11個贊

func prepareWhereINString(count int) string {

    var paramrefs string

    for i := 0; i < count; i++ {

        paramrefs += `$` + strconv.Itoa(i+1) + `,`

    }

    paramrefs = paramrefs[:len(paramrefs)-1] // remove last ","

    return paramrefs

}


查看完整回答
反對 回復(fù) 2023-06-19
?
忽然笑

TA貢獻1806條經(jīng)驗 獲得超5個贊

如您所知,IN需要一個標(biāo)量表達式列表,而不是數(shù)組,但是pgtype.Int4Array表示一個數(shù)組,而不是標(biāo)量表達式列表。


“IMO 雖然這有點容易出錯,因為你必須自己處理轉(zhuǎn)義/sql 注入等?!?/p>


不一定,您可以遍歷您的數(shù)組,構(gòu)造一個參數(shù)引用字符串,將其連接到查詢,然后執(zhí)行它傳遞數(shù)組與....


var paramrefs string

ids := []interface{}{1,2,3,4}

for i, _ := range ids {

    paramrefs += `$` + strconv.Itoa(i+1) + `,`

}

paramrefs = paramrefs[:len(paramrefs)-1] // remove last ","


query := `UPDATE ... WHERE id IN (` + paramrefs + `)`

pool.Exec(query, ids...)

或者,您可以使用ANY而不是IN。


ids := &pgtype.Int4Array{}

ids.Set([]int{1,2,3,4})

query := `UPDATE ... WHERE id = ANY ($1)`

pool.Exec(query, ids)

(這里你可能必須將參數(shù)引用轉(zhuǎn)換為適當(dāng)?shù)臄?shù)組類型,我不確定,試試不轉(zhuǎn)換,如果不行,嘗試轉(zhuǎn)換)


查看完整回答
反對 回復(fù) 2023-06-19
  • 2 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號