使用 Scala 的 Anorm 库中已有的资源,有一种方法可以转义 SQL 数据以进行外部写入(例如:数据转储)
Using the resources already available in Scala's Anorm library is there a way of escaping SQL data for an external write (e.g.: datadump)
我尽量不去写已经写好的代码——我真的是:)
我有一个生产 MariaDB 数据库,它只是拒绝将负载转储到其自身的早期版本,我需要编写一个自定义 dump/load 例程来处理这种情况。 myriad of compatibility switches 的 None 为 mysqldump
悲哀地行事。
手动清理转储的工作量太大且太危险,无法实现自动化,我需要精确地重复该过程几次,所以我负担不起任何手动工作。我知道有些工具可能会有所帮助,但编写代码(我熟悉)比学会信任另一个工具更容易
我之前在 platform/framework 中写过这段代码,所以我知道必须做什么以及如何做。
这次我想问的是,有没有一种优雅的方法可以使用 Anorm 用来清理数据的任何东西来清理数据预转储?
到目前为止,我什至无法查看 Anorm 生成的实际 SQL 查询(除了通过 MySQL 查询记录器)所以我不抱太大希望,但我我在问,以防其他人有办法进入我还没有找到的内部例程。
据我所知,答案显然是否定的。
但是我讨厌把事情留在死胡同里,所以这里有一个小程序可以解决问题。我很确定它可以更好地优化,因为我不太喜欢 char.toString
必须在 每个 字符上调用 not 替换。
def escapeSQLDelimiters(dataToEscape: String) = {
dataToEscape flatMap { c =>
c match {
case '\' => "\\"
case '\u0000' => "\0"
case '\n' => "\n"
case '\t' => "\t"
case '\r' => "\r"
case '\b' => "\b"
case '\'' => "\\'"
case '\"' => "\\""
case _ => c.toString
}
}
}
我尽量不去写已经写好的代码——我真的是:)
我有一个生产 MariaDB 数据库,它只是拒绝将负载转储到其自身的早期版本,我需要编写一个自定义 dump/load 例程来处理这种情况。 myriad of compatibility switches 的 None 为 mysqldump
悲哀地行事。
手动清理转储的工作量太大且太危险,无法实现自动化,我需要精确地重复该过程几次,所以我负担不起任何手动工作。我知道有些工具可能会有所帮助,但编写代码(我熟悉)比学会信任另一个工具更容易
我之前在 platform/framework 中写过这段代码,所以我知道必须做什么以及如何做。
这次我想问的是,有没有一种优雅的方法可以使用 Anorm 用来清理数据的任何东西来清理数据预转储?
到目前为止,我什至无法查看 Anorm 生成的实际 SQL 查询(除了通过 MySQL 查询记录器)所以我不抱太大希望,但我我在问,以防其他人有办法进入我还没有找到的内部例程。
据我所知,答案显然是否定的。
但是我讨厌把事情留在死胡同里,所以这里有一个小程序可以解决问题。我很确定它可以更好地优化,因为我不太喜欢 char.toString
必须在 每个 字符上调用 not 替换。
def escapeSQLDelimiters(dataToEscape: String) = {
dataToEscape flatMap { c =>
c match {
case '\' => "\\"
case '\u0000' => "\0"
case '\n' => "\n"
case '\t' => "\t"
case '\r' => "\r"
case '\b' => "\b"
case '\'' => "\\'"
case '\"' => "\\""
case _ => c.toString
}
}
}