Scala Slick: невозможно получить параметры в запросе
Я только что потратил часы на это. Я пытаюсь сделать довольно сложный запрос в 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. Но я нигде не могу понять, что Слик не позволит мне использовать ни одну из моих переменных.
Я попытался установить все виды последствий, некоторые из которых расширяют GetResult
некоторые, которые расширяются StatementParameters
Слик, кажется, игнорирует их все и заменяет мои аргументы на ?
или окружает их запятыми, делая все мои запросы недействительными. Я хотел бы добавить, что #$
не велик, потому что не обеспечивает санитарию. Я хотел бы придерживаться Slick, потому что он асинхронный, но я не уверен, куда идти дальше.
Это мои номера версий, согласно build.sbt
:
"postgresql" % "postgresql" % "9.1-901-1.jdbc4",
"com.typesafe.slick" % "slick_2.12" % "3.2.3",
Что я делаю неправильно?
2 ответа
Там нет ничего плохого ?
появляется в тебе результат заявления. Это просто параметризованный запрос, и каждый ?
представляет собой заполнитель для будущей стоимости.
Просто запустите ваши запросы к любой базе данных и проверьте результаты.
Вам нужно изменить ваш запрос следующим образом.
sql"""select * from cities_v where name = $location limit 10"""
Для получения дополнительной информации обратитесь