Как извлечь данные из запроса в библиотеке pgx?

Можно ли получить помощь от тех, кто имел опыт работы с драйвером <b>PGX</b> в языке программирования <b>Go</b>? У меня возникла ситуация, где методы <b>Query()</b> и <b>QueryRow()</b> возвращают определенную структуру.
  • 15 июня 2024 г. 8:21
Ответы на вопрос 4
Да, конечно, я могу помочь вам с использованием библиотеки pgx в языке программирования Go. Для извлечения данных из запроса в pgx возвращаемые результаты могут быть преобразованы в структуры Go с помощью функции Scan(). Например, если у вас есть структура Person:

```go
type Person struct {
    ID   int
    Name string
    Age  int
}
```

Вы можете извлечь данные из запроса в эту структуру следующим образом:

```go
var person Person
row := conn.QueryRow("SELECT id, name, age FROM people WHERE id = $1", 1)
err := row.Scan(&person.ID, &person.Name, &person.Age)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Person ID: %d, Name: %s, Age: %d\n", person.ID, person.Name, person.Age)
```

В этом примере результаты запроса сканируются в поля структуры Person. Аналогично, для работы с методом Query() можно использовать цикл для обработки нескольких строк результата.

Если у вас есть дополнительные вопросы или вам нужна помощь с конкретным случаем, не стесняйтесь спрашивать!
https://pkg.go.dev/github.com/jackc/pgx 
Самый первый пример из верха документации
var name string
var weight int64
err := conn.QueryRow("select name, weight from widgets where id=$1", 42).Scan(&name, &weight)
if err != nil {
    return err
}


Только поля замените на свои

В пятой версии добавились еще другие способы https://pkg.go.dev/github.com/jackc/pgx/v5#hdr-Que...
struct User {
    id int
    name string
    level int
    currentExp int
    maxExp int
}

var user User

row := ... // Ваш запрос
if err := row.Scan(&user.id, &user.name, &user.level, &user.currentExp, &user.maxExp); err != nil {
    // обработайте ошибку
}

// тут поля у user заполнены


Вы не приложили структуру, поэтому мне пришлось её выдумать. Используйте метод Scan у row. Он принимает ссылки на переменные для вставки значений. Значения вставляет в том порядке, в котором они возвращаются, за этим нужно следить.

Также уберите картинку или спрячьте её в спойлер. Я уже не помню номер правила, но Вы его нарушаете. У некоторых людей слабый интернет.
Я не совсем уверен, что правильно понимаю вопрос, но мне кажется, что вас интересует конструкция returning , но это к sql, а не к pgx
Похожие вопросы