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:
-
Karakterlánc összefűzés — a legegyszerűbb, de biztonságostalan módszer, amely érzékeny SQL-injekciókra.
-
Paraméterezett lekérdezések használata a
database/sqlcsomagokkal, argumentumokat?vagy$1segítségével átadva. -
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.