Scala Slick:无法在查询中获取参数
Scala Slick: cannot get parameters in query
我刚刚在这上面花了几个小时。我试图通过 Scala 中的 Slick 在 PostgreSQL 中进行一个非常复杂的查询,但 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",
我做错了什么?
?
出现在您的结果语句中并没有错。它只是 parametrized query,每个 ?
代表未来值的占位符。
只需 运行 您查询任何数据库并检查结果。
我刚刚在这上面花了几个小时。我试图通过 Scala 中的 Slick 在 PostgreSQL 中进行一个非常复杂的查询,但 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",
我做错了什么?
?
出现在您的结果语句中并没有错。它只是 parametrized query,每个 ?
代表未来值的占位符。
只需 运行 您查询任何数据库并检查结果。