Middle — Middle+
Какви подходи съществуват за формиране на SQL-заявка SELECT на лету с възможност за динамично изменение на условията и параметрите?
sobes.tech AI
Отговор от AI
За динамично създаване на SQL заявки SELECT в Go има няколко подхода:
-
Конкатенация на низове — най-простият, но и най-несигурният начин, податлив на SQL инжекции.
-
Използване на параметризирани заявки с пакети
database/sqlи предаване на аргументи чрез?или$1. -
Изградители на заявки (query builders) — библиотеки, които позволяват програмен състав на заявки с условия, сортиране и др.
Пример с библиотеката 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()
// обработка на резултатите
}
Този подход позволява динамично добавяне на условия и параметри, като се избягват грешки и SQL инжекции.
Може също да използвате ORM или собствени обвивки за създаване на заявки.