Sobes.tech
Middle — Middle+

Milyen megközelítések léteznek az SQL SELECT lekérdezés valós idejű kialakítására, dinamik módosításának lehetőségével a feltételek és paraméterek tekintetében?

sobes.tech MI

Válasz az MI-től

A dinamikus SQL-lekérdezések (SELECT) Go-ban több megközelítéssel is megvalósíthatók:

  1. Karakterlánc összefűzés — a legegyszerűbb, de biztonságostalan módszer, amely érzékeny SQL-injekciókra.

  2. Paraméterezett lekérdezések használata a database/sql csomagokkal, argumentumokat ? vagy $1 segítségével átadva.

  3. Lekérdező építők (query builders) — könyvtárak, amelyek lehetővé teszik a lekérdezések programozott összeállítását feltételekkel, rendezésekkel stb.

Példa a Squirrel könyvtár használatával:

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()
    // eredmények feldolgozása
}

Ez a módszer lehetővé teszi a feltételek és paraméterek dinamikus hozzáadását, elkerülve a hibákat és az SQL-injekciókat.

Továbbá ORM-eket vagy saját csomagokat is használhat a lekérdezések építéséhez.