Go postgres `SELECT * IN` используя массив - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть простое утверждение select:

Select * FROM X where X.name in ("bob", "joe") and X.phone='123'

Это прекрасно работает в postgres,

В моем коде Go у меня есть следующий код:

var phone string = "123"
var names []string = []string{"bob", "joe"}
sqlStatement := `Select * FROM X where X.name in ($1) and X.phone=$2`
rows, sqlerr := db.Query(sqlStatement, names, phone)

но по какой-то причине я выхожу из этого sql.

Неподдерживаемое сканирование, сохранение драйвера. Введите значение типа * string

как я могу использовать массив имен в стороне от sqlstatement?

примечание: если я делаю fmt.printf и вставляю оператор sql в postgres, я получаю данные обратно +, если я беру $ 1 и вручную вводю строки

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Я решил это, используя http://jmoiron.github.io/sqlx/#inQueries

var phone string = "123"
var names []string = []string{"bob", "joe"}
sqlStatement := `Select * FROM X where X.name in (?) and X.phone=?`
sqlStatement, args, err := sqlx.In(sqlStatement, names, phone)
sqlStatement = db.Rebind(sqlStatement)
        rows, sqlerr := db.Queryx(sqlStatement, args...)

теперь это возвращается правильно.

еще один способ решить эту проблему - использовать fmt.Sprintf() и преобразовать ? в %s

0 голосов
/ 06 ноября 2018

Копирование и вставка фрагментов из некоторого рабочего кода Go PostgreSQL:

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

    query := `
            . . .
            WHERE code = ANY($1)
           . . .

        `

    codes := []string{"JFK", "LGA", "EWR"}
    rows, err := db.Query(query, pq.Array(codes))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...