Scala Slick: невозможно получить параметры в запросе - PullRequest
0 голосов
/ 12 ноября 2018

Я только что потратил часы на это.Я пытаюсь сделать довольно сложный запрос в PostgreSQL через Slick в Scala, но Slick НИКОГДА не учитывает ни один из моих параметров.Если я попробую что-то простое, например:

def get(location: String) = {
  val query = sql"select * from cities_v where name = $location limit 10"
  println(query.toString)
}

Вывод будет:

SQLActionBuilder(Vector(select * from cities_v where name = ? limit 10),<function2>)

Если вместо этого я попытаюсь вставить буквенное значение:

def get(location: String) = {
  val query = sql"select * from cities_v where name = #$location limit 10"
  println(query.toString)
}

вывод будет:

SQLActionBuilder(Vector(select * from cities_v where name = , ville,  limit 10),<function2>

Slick ВСЕГДА будет добавлять запятые вокруг любого литерального аргумента, независимо от того, где он находится, даже если это единственный аргумент в запросе, например:

sql"#$q"

Теперь я хотел бы сделать более сложные запросы с вычислениями и вызовами функций в Postgres.Но я нигде не могу понять, что Slick не позволит мне использовать ни одну из моих переменных.

Я пытался установить всевозможные последствия, некоторые из которых расширяют GetResult некоторые расширяют StatementParameters, кажется, Slickигнорировать все из них и либо заменяет мои аргументы на ?, либо окружает их запятыми, тем самым делая все мои запросы недействительными.Я хотел бы добавить, что #$ не очень хорош, потому что он не обеспечивает дезинфекцию.Я бы хотел придерживаться Slick, потому что он асинхронный, но я не уверен, куда идти.

Это мои номера версий, согласно build.sbt:

"postgresql"         %  "postgresql"           % "9.1-901-1.jdbc4",
"com.typesafe.slick" %  "slick_2.12"           % "3.2.3",

Что я делаю не так?

1 Ответ

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

Нет ничего плохого в том, что ? появляется в ваших результатах. Это просто параметризованный запрос , и каждый ? представляет заполнитель для будущего значения.

Просто запустите ваши запросы к любой базе данных и проверьте результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...