Scala Play Framework Anorm SQL.on禁用使用'';

Scala Play Framework Anorm SQL.on禁用使用'';,scala,playframework,playframework-2.0,anorm,Scala,Playframework,Playframework 2.0,Anorm,每当我使用上的替换SQL查询中的占位符时,它都会用“”来包围替换,有没有办法防止这种情况发生 这意味着我不能做像这样的事情 SQL("SELECT * FROM {table} blah").on("table" -> tabletouse) 因为它将表名包装为“”,这会导致SQL语法错误 你不能做你想做的事。阿诺姆的替代品是基于准备好的报表。这意味着所有数据将自动转义,这意味着您不能将替换用于: 表名 列名 任何操作数、SQL关键字等 这里最好的方法是字符串连接(在我看来,这是一

每当我使用上的替换SQL查询中的占位符时,它都会用“”来包围替换,有没有办法防止这种情况发生

这意味着我不能做像这样的事情

SQL("SELECT * FROM {table} blah").on("table" -> tabletouse) 

因为它将表名包装为“”,这会导致SQL语法错误

你不能做你想做的事。阿诺姆的替代品是基于准备好的报表。这意味着所有数据将自动转义,这意味着您不能将替换用于:

  • 表名
  • 列名
  • 任何操作数、SQL关键字等
这里最好的方法是字符串连接(在我看来,这是一种非常糟糕的方法):


PS:签出此

您当然可以将这两种方法结合起来,对不希望转义的数据使用format函数

SQL(
  """
    select %s from %s
    where
      name = {name} and
      date between {start} and {end}
    order by %s
  """.format(fields, table, order)
).on(
  'name     -> name,
  'start    -> startDate,
  'end      -> endDate
)

只需考虑使用format功能发送的数据不应来自用户输入,否则应进行适当清理

它来自由用户输入确定的配置,这就是我需要的。谢谢
SQL(
  """
    select %s from %s
    where
      name = {name} and
      date between {start} and {end}
    order by %s
  """.format(fields, table, order)
).on(
  'name     -> name,
  'start    -> startDate,
  'end      -> endDate
)