在Slick中选择许多任意列

时间:2014-09-19 23:13:24

标签: sql scala slick

我试图在Slick中针对视图运行SELECT *样式的查询。理想情况下,我最终会得到一个函数,您可以将一组列名称作为Seq[String]传递,并执行查询SELECT col1, col2, ... FROM view。如果这不可行,则只需返回所有列(SELECT * FROM view)即可接受。

我知道我可以通过为这个视图定义一个Table类以及一个附带的case类来做到这一点,但是其中一些视图有数百列(这需要嵌套元组,因为那里有&#39} ;元组的元素限制为22,并且我必须执行此操作的许多视图,以便编写/生成/维护许多代码。如果可能的话,我想避免这种情况。

这在Slick中可行吗?通过定义Table类而不必在静态代码中定义列(使用动态列字符串列表初始化某些类是可接受的),或者仅使用sql"""..."""生成SQL查询并以某种方式获取.as[...]处理返回一组任意长度的列?

我不需要对实际的列类型做任何特殊的事情:在数据库方面,我们有各种类型的混合,但是如果他们在Slick上都被视为文本列这一方对我没问题。

1 个答案:

答案 0 :(得分:3)

光滑不适合您的要求。

当您想要访问任意列时(例如,使用List[String]列名称),您将失去Slick提供的所有类型安全优势,因为它无法验证架构。

这意味着您必须抛弃Slick的表类,并使用生成的SQL(使用String查询)寻求完全动态的解决方案。

虽然Slick允许您手动编写SQL(查看StaticQuery.query函数),但其他库更适合该任务。我建议看看ScalikeJDBC。