如何使用 Slick 3.0.0 执行 sql 文件

How to execute sql file with Slick 3.0.0

我有这样的结构

src
└── main
    ├── resources
    │   └── inserts.sql
    └── my.package
        └── Main.scala

Main.scala 中,我想获取文件 inserts.sql 并使用 Slick 3.0.0 在我的数据库上执行它。

您可以读取文件内容:

val query = scala.io.Source.fromResource("inserts.sql").mkString

然后使用 sqlsqlu 插值器创建查询:

//https://scala-slick.org/doc/3.0.0/sql.html
sql"$query".as[ExpectedType]

和运行 一如既往:)

PS:未测试。现在没有准备环境

看起来无法使用 Slick 执行 sql 文件,然后将其作为字符串加载到内存中并使用 sqlsqlu 或 [=13 执行它=].

请注意,在这种情况下,$ 插值意味着将绑定变量插入到查询中。要将文字值拼接到查询中,您必须改用 #$。由于在这种情况下变量是整个查询,我们必须做

val inserts_sql = Source.fromResource("inserts.sql").mkString

db.run(sqlu"#$query")

一个SQL字符串可以直接使用SQLActionBuilder class.

执行

此外,由于我们从 Source.fromResource 获得的 BufferedSource 对象是 Closable,我们应该用 Using 块包装它。

import slick.jdbc.SetParameter.SetUnit
import slick.jdbc.SQLActionBuilder

import scala.io.Source
import scala.util.Using

// ...

Using(Source.fromResource("inserts.sql")) { insertsSqlSource =>
  val sqlActionBuilder = SQLActionBuilder(insertsSqlSource.mkString, SetUnit)
  database.run(sqlActionBuilder.asUpdate)
}