Sobes.tech
Middle — Middle+

Kādi pieejas pastāv, lai veidotu SQL SELECT vaicājumu tieši laikā ar iespēju dinamiski mainīt nosacījumus un parametrus?

sobes.tech AI

Atbilde no AI

Dinamiski formējot SQL SELECT vaicājumus Go valodā, ir vairākas pieejas:

  1. Rindu savienošana — vienkāršākā, bet ne droša metode, pakļauta SQL injekcijām.

  2. Parametrizētu vaicājumu izmantošana ar paketēm database/sql un argumentu nodošanu caur ? vai $1.

  3. Vaicājumu būvētāji (query builders) — bibliotēkas, kas ļauj programmatiski veidot vaicājumus ar nosacījumiem, kārtojumiem utt.

Piemērs ar Squirrel:

import (
    "github.com/Masterminds/squirrel"
    "database/sql"
    _ "github.com/lib/pq"
)

func buildQuery(age int, active bool) (string, []interface{}, error) {
    qb := squirrel.Select("id", "name").From("users")

    if age > 0 {
        qb = qb.Where(squirrel.Gt{"age": age})
    }
    if active {
        qb = qb.Where(squirrel.Eq{"active": true})
    }

    return qb.ToSql()
}

func main() {
    db, _ := sql.Open("postgres", "connection_string")
    query, args, _ := buildQuery(30, true)
    rows, _ := db.Query(query, args...)
    defer rows.Close()
    // rezultātu apstrāde
}

Šī pieeja ļauj dinamiskā veidā pievienot nosacījumus un parametrus, izvairoties no kļūdām un SQL injekcijām.

Tāpat var izmantot ORM vai savus wrapperus vaicājumu veidošanai.